假设设串采用静态数组存储结构,编写函数实现串的替换Replace(S,start,T,V)

设串采用静态数组存储结构,编写函数实现串的替换Replace(S,start,T,V)。即要求在主串S中,从位置start开始查找是否存在子串T,若主串S中存在子串T,则用子串V替换子串T,且函数返回1;若主串S中不存在子串T,则函数返回0.

慕莱坞森
浏览 360回答 1
1回答

月关宝盒

功力不足,做到抓狂,还好忍着性子,算是修炼吧。简单注释了下,不懂可以联系我:#include <stdio.h>#include <string.h>Replace(char *S,int start,char *T,char *V){int i,j,k,l,n,m,s,count=0,signal=0;n=strlen(T);/*求字符串长度*/m=strlen(V);s=strlen(S);for(i=start-1;S[i]!='\0';i++)/*开始查找*/{ k=i;j=0;while(S[k]==T[j])/*与子串T对比*/{k++;j++;}if(T[j]=='\0')/*判断是否T存在*/{if(m-n>0)/*第一种情况,字符串V比T长的情况下*/{for(l=s+(m-n)*(count+1)-1;l>=k;l--)S[l]=S[l-m+n];for(l=k-n,j=0;j<m;l++,j++)S[l]=V[j];count++;}else if(m-n<0)/*第二种情况,字符串V比T短的情况下*/{for(l=k-n,j=0;j<m;l++,j++)S[l]=V[j];for(;l<s+(m-n)*(count+1);l++)S[l]=S[l+n-m];count++;}else/*第三种情况,T和V一样长*/{for(l=k-1;l>=k-n;l--,j--)S[l]=V[j-1];}signal=1;}}S[s+(m-n)*count]='\0';if(signal)return 1;/*返回值*/else return 0;}void main(){char a[100],b[100],c[100];<br/> int n;<br/> printf("请输入字符串S: ");<br/> gets(a);<br/> printf("请输入查找的子串T: ");<br/> gets(b);<br/> printf("请输入替换的子串V: ");<br/> gets(c);<br/> printf("请输入开始查找的位置start: ");<br/> scanf("%d",&n);<br/> if(Replace(a,n,b,c))<br/> printf("替换后的结果是: %s\n",a);<br/> else<br/> printf("S中不存在子串T!\n");<br/>}
打开App,查看更多内容
随时随地看视频慕课网APP