为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2022-03-10 11:07:52
设串采用静态数组存储结构,编写函数实现串的替换Replace(S,start,T,V)。即要求在主串S中,从位置start开始查找是否存在子串T,若主串S中存在子串T,则用子串V替换子串T,且函数返回1;若主串S中不存在子串T,则函数返回0.
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

功力不足,做到抓狂,还好忍着性子,算是修炼吧。简单注释了下,不懂可以联系我:
#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/>}



查看完整回答
反对 回复 2022-03-15
  • 1 回答
  • 0 关注
  • 357 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信