#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize]; //存储数据的数组
int len; //字符串长度
}SqString;
void StrAssign(SqString &str,char cstr[]) //初始化
{
int i;
for (i=0;cstr[i]!='\0';i++)
str.data[i]=cstr[i];
str.len=i;
}
void StrCopy(SqString &s,SqString t) //复制
{
int i;
for (i=0;i<t.len;i++)
s.data[i]=t.data[i];
s.len=t.len;
}
int StrLength(SqString s) //返回长度
{
return s.len;
}
int ComStr(SqString s,SqString t) //判断大小
{
int i;
for (i=0;i<s.len;i++){
if (s.data[i]==t.data[i]) /*有一个对应字符不同时返回0*/
{
return 0;
}
if(s.data[i]>t.data[i]){
return 1;
break;
}
if(s.data[i]<t.data[i]){
return -1;
break;
}
}
}
SqString Concat(SqString s,SqString t) //连接
{
SqString str;
int i;
str.len=s.len+t.len;
for (i=0;i<s.len;i++)
str.data[i]=s.data[i];
for (i=0;i<t.len;i++)
str.data[s.len+i]=t.data[i];
return str;
}
SqString SubStr(SqString s,int i,int j) //子串
{
SqString str;
int k;
str.len=0;
if(i<=0 || i>s.len || j<0 || i+j-1>s.len)
{
printf("参数不正确\n");
return str; /*参数不正确时返回空串*/
}
for(k=i-1;k<i+j-1;k++)
str.data[k-i+1]=s.data[k];
str.len=j;
return str;
}
SqString RepStr(SqString s,int i,int j,SqString t) //替换
{
int k;
SqString str;
str.len=0;
if (i<=0 || i>s.len || i+j-1>s.len) /*参数不正确时返回空串*/
{
printf("参数不正确\n");
return str;
}
for (k=0;k<i-1;k++)
str.data[k]=s.data[k];
for (k=0;k<t.len;k++)
str.data[i+k-1]=t.data[k];
for (k=i+j-1;k<s.len;k++)
str.data[t.len+k-j]=s.data[k];
str.len=s.len-j+t.len;
return str;
}
SqString DelStr(SqString s,int i,int j) //删除
{
int k;
SqString str;
str.len=0;
if (i<=0 || i>s.len || i+j>s.len+1) /*参数不正确时返回空串*/
{
printf("参数不正确\n");
return str;
}
for (k=0;k<i-1;k++)
str.data[k]=s.data[k];
for (k=i+j-1;k<s.len;k++)
str.data[k-j]=s.data[k];
str.len=s.len-j;
return str;
}
SqString InsStr(SqString s1,int i,SqString s2) //插入
{
int j;
SqString str;
str.len=0;
if (i<=0 || i>s1.len+1) /*参数不正确时返回空串*/
{
printf("参数不正确\n");
return s1;
}
for (j=0;j<i-1;j++)
str.data[j]=s1.data[j];
for (j=0;j<s2.len;j++)
str.data[i+j-1]=s2.data[j];
for (j=i-1;j<s1.len;j++)
str.data[s2.len+j]=s1.data[j];
str.len=s1.len+s2.len;
return str;
}
void DispStr(SqString s) //展现
{
int i;
if (s.len>0)
{
for (i=0;i<s.len;i++)
printf("%c",s.data[i]);
printf("\n");
}
}
int main()
{
SqString A,B,C,D,E,F,G;
printf("一.>>>>>建立串A和B<<<<<<\n");
StrAssign(A,"Ilove");
StrAssign(B,"China!!");
printf("<<<<<二.<输出串A>>>>>\n");
DispStr(A);
printf("<<<<<三.输出串B>>>>>\n");
DispStr(B);
printf("<<<<<四.输出串A和串B的长度>>>>>\n");
printf("A:%d\n",StrLength(A));
printf("B:%d\n",StrLength(B));
printf("<<<<<五.判断串A和串B相等返回0,A>B返回1,A<B返回-1>>>>>\n");
printf("%d\n",ComStr(A,B));
printf("<<<<<六.将A和B连接生成C:>>>>>\n");
C=Concat(A,B);
DispStr(C);
printf("<<<<<七.删除串A的第2个字符开始的2个字符而生成串D>>>>>\n");
D=DelStr(A,2,2);
DispStr(D);
printf("<<<<<八.在串A的第3个字符位置插入串B而生成串E>>>>>\n");
E=InsStr(A,3,B);
DispStr(E);
printf("<<<<<九.将串A的第2个字符开始的3个字符替换成串B而生成串F>>>>>\n");
F= RepStr(A,2,3,B);
DispStr(F);
printf("<<<<<十.提取串A的第3个字符开始的4个字符而生成串G>>>>>\n");
G = SubStr(A,3,4);
DispStr(G);
printf("<<<<<十一.将A中的内容复制到B中,输出B>>>>>\n");
StrCopy(B,A);
DispStr(B);
}
![](https://img2018.cnblogs.com/blog/1631604/201905/1631604-20190523203053544-951416362.png)