这里的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
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_Len += Replace_Str_Len-Find_Str_Len; /*改变字符串长度*/
Test[Test_Len] = '\0';
for(k=i;k
i += Replace_Str_Len;/*关键之处:当替换数中包括被替换数时,防止反复替换,*/
}
}
}
#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