#include <iostream>#include <stdio.h>#include <stdlib.h>#define MaxSize 100typedef struct{  char data[MaxSize];  int length;}SqString;
void Assign(SqString &s,char str[]){  int i=0;  while(str[i]!='\0')  {    s.data[i] = str[i];    i++;  }  s.length=i;}
void StrCopy(SqString &s,SqString t){  int i;  for(i=0;i<t.length;i++)    s.data[i]= t.data[i];  s.length=t.length;}
int StrLength(SqString s){  return s.length;}
int StrEqual(SqString s,SqString t){  int i=0;  if(s.length!=t.length){    return 0;  }  else{    for(i=0;i<s.length;i++)    {       if(s.data[i]!=t.data[i])       {         return 0;       }    }    return 1;  }}
SqString Concat(SqString s,SqString t){  SqString r;  int i,j;  for(i=0;i<s.length;i++)  {    r.data[i]=s.data[i];  }  for(j=0;j<t.length;j++)  {    r.data[s.length+j]=t.data[j];   }    r.length=i+j;   return r;}
SqString SubStr(SqString s,int i,int j){  SqString t;  int k,n=0;  if(i<1||i>s.length ||j<1||i+j>s.length+1)  {    t.length=0;  }  else{    for(k=i-1;k<i+j;k++)    {      t.data[n++]=s.data[k];    }    t.length = j;  }  return t;}
int Index(SqString s,SqString t){  int i=0,j=0;  while(i<s.length&&j<t.length)  {    if(s.data[i]==t.data[j])    {      i++;      j++;    }    else{      i=i-j+1;      j=0;    }  }  if(j>=t.length)  {    return i-t.length+1;  }  else  {    return 0;  }}int InsStr(SqString &s,int i,SqString t){  int j;  if(i<1||i>s.length+1)  {    return 0;  }  else{    for(j=s.length-1;j>=i-1;j--)    {      s.data[j+t.length]=s.data[j];    }    for(j=0;j<t.length;j++)    {      s.data[i+j-1]=t.data[j];    }    s.length = s.length+t.length;    return 1;  }}int DelStr(SqString &s,int i,int j){  int k;  if(i<1||i>s.length||j<1||i+j>s.length+1)  {    return 0;  }  else{    for(k = i+j-1;k<s.length;k++)    {      s.data[k-j] =s.data[k];    }    s.data[s.length-j]='\0';    s.length = s.length-j;    return 1;  }}SqString RepStrAll(SqString s,SqString s1,SqString s2) {  int i;  i= Index(s,s1);  while(i>0)  {    DelStr(s,i,s1.length);    InsStr(s,i,s2);    i = Index(s,s1);   }    return s;}void DispStr(SqString s){  int i;  for(i=0;i<s.length;i++)  printf("%c",s.data[i]);  printf("\n");}int main(int argc, char** argv) {   SqString s1,s2,s3,s4,s5,s6,s7;   Assign(s1,"IC");   printf("s1:");   DispStr(s1);   printf("s1的长度为:%d\n",StrLength(s1));   printf("s1复制到s2\n");  StrCopy(s2,s1);        printf("s2:");        DispStr(s2);        printf("s1和s2字符串%s\n",(StrEqual(s1,s2)==1?"相同":"不相同"));        Assign(s3,"666654321");        printf("s3:");        DispStr(s3);        printf("s1和s3连接生成s4:\n");        s4 = Concat(s1,s3);        printf("s4:");        DispStr(s4);        printf("s3[2...5]生成s5\n");        s5=SubStr(s3,2,4);        printf("s5:");        DispStr(s5);        Assign(s6,"543");   printf("s6:");   DispStr(s6);   printf("s6在s3中的位置:%d\n",Index(s3,s6));  printf("从s3中删除s2[3...6]字符\n");  DelStr(s3,3,4);        printf("s3:");        DispStr(s3);        printf("s4中将s6替换成s1生成s7\n");        s7 = RepStrAll(s4,s6,s1);        printf("s7:");        DispStr(s7);  return 0;}
评论