串的基本运算

  • 格式:doc
  • 大小:212.00 KB
  • 文档页数:9

串的基本运算

#include

#define STRINGMAX 100

typedef struct

{

char vec[STRINGMAX];

int len;

}str;

void ConcatStr(str *r1,str *r2)

{

int i;

if(r1->len+r2->len>STRINGMAX)//连接后的串长超过串的最大长度

printf("两串太长,溢出\n");

else

{

for (i=0;ilen;i++)

r1->vec[r1->len+i]=r2->vec[i];

r1->vec[r1->len+i]='\0';

r1->len=r1->len+r2->len;

}

}

void SubStr(str *r,int i,int j)

{

int k;

str a;

str *r1=&a;

if(i+j-1>r->len)

{

printf("\n字串超界\n");

return ;

}

else

{

for(k=0;k

r1->vec[k]=r->vec[i+k-1];

r1->vec[j]='\0';

}

printf("\n取出字符为:");

puts(r1->vec);

}

void DelStr(str *r,int i,int j)

//删除字串 i指定位置 j为连续删除的字符个数

{ int k;

if(i+j-1>r->len)

printf("\n\t\t所要删除的字串超界");

else

{

for(k=i+j;klen;k++,i++)

r->vec[i]=r->vec[k];

r->len=r->len-j;

r->vec[r->len]='\0';

}

printf("删除字符后的串为:");

puts(r->vec);printf("\n");

}

str *InsStr(str *r,str *r1,int i)

{

int k;

if(i>=r->len||r->len+r1->len>STRINGMAX)

printf("\n\t\t不能插入\n");

else

{

for(k=r->len-1;k>=i;k--)

r->vec[r1->len+k]=r->vec[k];//腾出该长度的空间

for(k=0;klen;k++)

r->vec[i+k]=r1->vec[k];

r->len=r->len+r1->len;

r->vec[r->len]='\0';

}

return r;

}

int IndexStr(str *r,str *r1)

{

int i,j,k;

for(i=0;r->vec[i];i++)

for(j=i,k=0;r->vec[j]==r1->vec[k];j++,k++)

if(!r1->vec[k+1])

return i;

return -1;

}

int LenStr(str *r)

{

int i=0;

while(r->vec[i]!='\0')

i++; return i;

}

str *CreateStr(str *r)

{

gets(r->vec);

r->len=LenStr(r);

return r;

}

int EqualStr(str *r1,str *r2)

{int i;

for( i=0;r1->vec[i]&&r2->vec[i]&&r1->vec[i]==r2->vec[i];i++);

//每个字符逐一比较

return r1->vec[i]-r2->vec[i];

}

void main()

{

str a,b,c,d;

str*r=&a,*r1;

char choice,p;

int i,j,ch=1;

r->vec[0]='\0';

while(ch!=0)

{

printf("\n");

printf("\n\t\t串的基本操作");

printf("\n\t\t****************");

printf("\n\t\t* 1-----输入字串");

printf("\n\t\t* 2-----连接字串");

printf("\n\t\t* 3-----取出字串");

printf("\n\t\t* 4-----删除字串");

printf("\n\t\t* 5-----插入字串");

printf("\n\t\t* 6-----查找字串");

printf("\n\t\t* 7-----比较字串大小");

printf("\n\t\t* 8-----显示字串");

printf("\n\t\t* 0-----返 回");

printf("\n\t\t****************\n");

printf("请选择(0-8):");

scanf("%c",&choice);

getchar();//getchar()不可删

if(choice=='1')

{

printf("\n\t\t请输入字符串:");

gets(r->vec); r->len=LenStr(r);

}

else if(choice=='2')

{

printf("\n\t\t请输入所要连接的串:");

r1=CreateStr(&b);

ConcatStr(r,r1);

printf("\n\t\t连接以后的新串值为:");

puts(r->vec);

}

else if(choice=='3')

{

printf("\n\t\t请输入从第几个字符开始:");

scanf("%d",&i);

printf("\n\t\t请输入要取字符的个数:");

scanf("%d",&j);

//getchar();此处可删

SubStr(r,i,j);

}

else if(choice=='4')

{

printf("\n请输入从第几个字符开始:");

scanf("%d",&i);

//getchar();都可要可不要

printf("\n请输入删除的连续字符数:");

scanf("%d",&j);

//getchar();

DelStr(r,i-1,j);

}

else if(choice=='5')

{

printf("\n\t\t请输入从第几个字符开始:");

scanf("%d",&i);

getchar();//此处可要可不要

printf("\n\t\t请输入所要插入的字符串:");

getchar();//非要不可

//gets(r1->vec);r1->len=LenStr(r1);

r1=CreateStr(&b);

InsStr(r,r1,i-1);

printf("\n\t\t插入字符串后的字符串显示为:");

puts(r->vec);

}

else if(choice=='6')

{ printf("\n\t\t请输入所要查找的字符串:");

r1=CreateStr(&b);

i=IndexStr(r,r1);

if(i!=-1)

printf("\n\t\t第一次出现的位置是第%d个\n:",i+1);

else

printf("\n\t\t该子串不在其中\n");

}

else if(choice=='7')

{int k;

printf("\n\t\t请输入第一个串:");

gets(c.vec);printf("\n");

printf("\n\t\t请输入第二个串:");

gets(d.vec);printf("\n");

k=EqualStr(&c,&d);

if(k>0)

printf("\n\t\t第一个串大\n");

else if(k<0)

printf("\n\t\t第二个串大\n");

else

printf("\n\t\t两个串一样大\n");

}

else if(choice=='8')

{

printf("\n\t\t该串值为:\n");

if(r->vec[0]=='0')

printf("空\n");

else

puts(r->vec);

}

else if(choice=='0')

break;

else

printf("\n\t\t请注意输入有误\n");}}