终极字符串题!!我写好了!感觉里面有bug求大家帮帮忙找找了!而且这一题还有其他方法吗?
终极字符串题:字符串替换;测试用例要周密s1,s2,s3,找到s1中所有s2字符串,并将其替换为字符串s3
s1:"111lkj111lkjaelkj1111111111lkajwelkrj111";
s2:"111";
s3:"22", (“要考虑如下情况22, 222, 2222”);
替换结果:"22lkj22lkjaelkj2222221lkajwelkrj2"
*/
char s1[100],s2[100],s3[100];
printf("请输入S1字符串:");
scanf("%s",s1);
printf("请输入S2字符串:");
scanf("%s",s2);
printf("请输入S3字符串:");
scanf("%s",s3);
int temp=0,c1=0,c2=0,c3=0;//计算出每个字符串的长度.
while(s1[temp]!='\0')
{
c1=temp+1;
temp++;
}
temp=0;
while(s2[temp]!='\0')
{
c2=temp+1;
temp++;
}
temp=0;
while(s3[temp]!='\0')
{
c3=temp+1;
temp++;
}
printf("s1的长度:%d s2的长度:%d s3的长度:%d\n",c1,c2,c3);
int i=0;
while(i<c1)
{
if(s1[i]==s2[0])
{
int j=i,x=0;
while(j-i<c2)
{
if(s2[j-i]==s1[j])
{
x++;
}
else
{
x=0;
break;
}
j++;
}
if(x!=0)//如果s1串中找到了s2串的位子开始和s3替换
{
if(c3>x)//3中情况:如果要替换的大于c2那么c1要++.
{
int z=0;
while(z<c1-i)
{
s1[c1+(c3-c2)-z]=s1[c1-z];
z++;
}
c1=c1+(c3-c2);
j=0;
while(j<c3)
{
s1[i+j]=s3[j];
j++;
}
}
else if(c3<x)//如果要替换的小于c2那么c1要--.
{
int x2=x-c3;
c1-=x2;
int z=i;
while(z<c1)
{
s1[z+c3-1]=s1[z+c2-1];
z++;
}
j=i;
while(j-i<c3)
{
s1[j]=s3[j-i];
j++;
}
}
else
{
j=i;
while(j-i<x)
{
s1[j]=s3[j-i];
j++;
}
}
}
}
i++;
}
printf("替换完成s1:%s\n",s1);