问题描述:任意给定3个字符串str1、str2和str3,请将str1中所有的str2替换成str3,
且在替换的结果字符串中不能再有str2存在,如果一次替换后strl中还有str2存在,那么
继续替换str2,直到strl中不存在str2为止。在替换时,优先替换str1中首次出现的str2
(例如str1为 ababab,str2为aba,那么首先替换最初出现的aba,即str1的前3个字符)。
strl、str2、str3这3个字符串中可以包含任意的字符,注意str1中不一定包含str2,str3中
定不包含str2(如st2为aa,str3为ab,这种情况是不存在的)。
输入与输出要求:输人3个长度均不超过100的非空字符串,分别为题目中所述的
str1、str2和str3。输出经过替换处理后得到的新strl,占一行。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*不想做高数,还是代码好玩*/
int check(char st1[],char st2[]);
void replace(char st1[], char st2[], char st3[]);
int checkLoc(char st1[], char st2[]);
int main()
{
char st1[110], st2[110], st3[110];
gets(st1);
gets(st2);
gets(st3);
while (check(st1, st2) == 1)//当st1中还有st2时
{
replace(st1, st2, st3);
}
puts(st1);
return 0;
}
int check(char st1[], char st2[])//检查st1中是否含有st2
{
int i, j;
for (i = 0; st1[i]; i++)
{
if (st2[0] == st1[i])
{
int k = i;
for (j = 0; st2[j] == st1[k]; j++, k++)
{
if (st2[j + 1] == '\0')
return 1;
}
}
}
return 0;
}
void replace(char st1[], char st2[], char st3[])//替换操作
{
int i, j=0;
for (i = checkLoc(st1,st2); st1[i]&&st2[j]; i++)
{
st1[i] = st3[j++];
}
}
int checkLoc(char st1[], char st2[])//检查替换开始的位置
{
int i, j;
for (i = 0; st1[i]; i++)
{
if (st2[0] == st1[i])
{
int k = i;
for (j = 0; st2[j] == st1[k]; j++, k++)
{
if (st2[j + 1] == '\0')
return i;
}
}
}
return 0;
}