for(=S(O; I>=i+T[]: 1-) S[+VIOJ-TIOJSU; for(=1k<=V[o]++) else/新子串长度小于原子串时先将后部左移 for(l=i+V[O K<=S[0+VIOJ-T[O]: 1++) S[S[-VIOF+TIOII for(l-1; K=V[O]: 1++) S[OFS[OJ-T[OJ VION i+=V[O]: n++ eturn n: i//String Replace 4.18 typedef struct i char ch Int num s mytype void StrAnalyze( Stringtype S)/统计串S中字符的种类和个数 mytype TIMAXSIZE〃用结构数组T存储统计结果 for(=1<=S[];i++) c=S[j严=0 while(]ch&&li]chl=c)j++,∥查找当前字符c是否已记录过 if(TT]. ch) TL.num+ else Tu(c, 1) for(0, T0. ch; j++) printf("%c: %dn",TU].ch,TG]. num) i//Stranalyze 4.19 void subtract string( Stringtype s, Stringtype t, Stringtype&ry求所有包含在串s中 而t中没有的字符构成的新串r{ for(l=S[0];l>=i+T[0];l--) S[l+V[0]-T[0]]=S[l]; for(l=1;l<=V[0];l++) S[i+l-1]=V[l]; } else //新子串长度小于原子串时:先将后部左移 { for(l=i+V[0];l<=S[0]+V[0]-T[0];l++) S[l]=S[l-V[0]+T[0]]; for(l=1;l<=V[0];l++) S[i+l-1]=V[l]; } S[0]=S[0]-T[0]+V[0]; i+=V[0];n++; }//if }//for return n; }//String_Replace 4.18 typedef struct { char ch; int num; } mytype; void StrAnalyze(Stringtype S)//统计串 S 中字符的种类和个数 { mytype T[MAXSIZE]; //用结构数组 T 存储统计结果 for(i=1;i<=S[0];i++) { c=S[i];j=0; while(T[j].ch&&T[j].ch!=c) j++; //查找当前字符 c 是否已记录过 if(T[j].ch) T[j].num++; else T[j]={c,1}; }//for for(j=0;T[j].ch;j++) printf("%c: %d\n",T[j].ch,T[j].num); }//StrAnalyze 4.19 void Subtract_String(Stringtype s,Stringtype t,Stringtype &r)//求所有包含在串 s 中 而 t 中没有的字符构成的新串 r {