#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;}
评论