r[o}=0 for(Fl; K<=s[0]: i++) c=s]; for(j=1ji&S]=c计十);∥判断s的当前字符c是否第一次出现 for(k=1k<=t[o]&&tk]=ck++);∥判断当前字符是否包含在t中 if(k>t[OD[++r[OJ=c }/f 3//Subtract String 4.20 int SubString Delete( Stringtype&s, Stringtype ty/从串s中删除所有与t相同的子串, 并返回删除次数 for(n=0,=1;i<=s]-t[O]+1i+) for(=lj<=t[O]&&s[i+j-1]=t[:j++) f(>m)∥找到了与t匹配的子串 fo(k=ik<=sp}-t[0]k++)sk}=sk+o,∥左移删除 s[0]-=t[]n++ return n, i//Delete SubString 4.21 typedef struct( char ch L StrOde *next } LStrNode* STring,/链串结构 void String assign( STring& S, STring t)把串t赋值给串 s=malloc(sizeof(LStrNode)) for(q=s, p=t->next; p p=p->next) r=(LStrNode*)malloc(sizeof(LStrNode): q->next=r, qr[0]=0; for(i=1;i<=s[0];i++) { c=s[i]; for(j=1;j<i&&s[j]!=c;j++); //判断 s 的当前字符 c 是否第一次出现 if(i==j) { for(k=1;k<=t[0]&&t[k]!=c;k++); //判断当前字符是否包含在 t 中 if(k>t[0]) r[++r[0]]=c; } }//for }//Subtract_String 4.20 int SubString_Delete(Stringtype &s,Stringtype t)//从串s中删除所有与t相同的子串, 并返回删除次数 { for(n=0,i=1;i<=s[0]-t[0]+1;i++) { for(j=1;j<=t[0]&&s[i+j-1]==t[i];j++); if(j>m) //找到了与 t 匹配的子串 { for(k=i;k<=s[0]-t[0];k++) s[k]=s[k+t[0]]; //左移删除 s[0]-=t[0];n++; } }//for return n; }//Delete_SubString 4.21 typedef struct{ char ch; LStrNode *next; } LStrNode,*LString; //链串结构 void StringAssign(LString &s,LString t)//把串 t 赋值给串 s { s=malloc(sizeof(LStrNode)); for(q=s,p=t->next;p;p=p->next) { r=(LStrNode*)malloc(sizeof(LStrNode)); r->ch=p->ch; q->next=r;q=r; }