每次给你三个字符串A,B,C,你要把A里面的B全部用C替换.(B在A里面出现的顺序替换)

2025-01-19 14:09:47
推荐回答(2个)
回答1:

这里的Test[] 代表A
Find_Str[] 代表B
Replace_Str[] 代表C

void Replace(char Test[],char Find_Str[],char Replace_Str[])
{
int Test_Len = strlen(Test);
int Find_Str_Len = strlen(Find_Str);
int Replace_Str_Len = strlen(Replace_Str);
int i,j,k,Sum=0;

for(i=0;i< Test_Len - Find_Str_Len + 1;i++)
{
for(j=0;j if(Test[j+i]!=Find_Str[j])
break;

if(j==Find_Str_Len)
{
Sum++;
if(Replace_Str_Len>=Find_Str_Len)/*替换字符串和被替换字符串长度比较*/
for(k=Test_Len-1;k>=i+Find_Str_Len-1;k--)/*向后移动*/
Test[k+Replace_Str_Len-Find_Str_Len] = Test[k];

else
for(k=i+Find_Str_Len;k Test[k+Replace_Str_Len-Find_Str_Len] = Test[k];

Test_Len += Replace_Str_Len-Find_Str_Len; /*改变字符串长度*/
Test[Test_Len] = '\0';

for(k=i;k Test[k] = Replace_Str[k-i];

i += Replace_Str_Len;/*关键之处:当替换数中包括被替换数时,防止反复替换,*/
}
}
}

回答2:

#include
#include

int main(void)
{
char aa[65026], dest[256], change[256], tmp[65026];
char *p = NULL, *perend = NULL;

while(NULL != gets(aa))
{
gets(dest);
gets(change);
perend = aa;
while(NULL != (p = strstr(perend, dest)))
{
sprintf(tmp, "%s%s", change, &p[strlen(dest)]);
strcpy(p, tmp);
perend = p + strlen(change);
}
printf("%s\n", aa);
}
return 0;
}
关于字符串长度。
我考虑的是如果下面的case如何不越界,故设为65026
111111111....111(255个1)
1
nnnnnnnnn....nnn(255个n)
那么返回最大字符串长度为255*255+1=65026