近日被道字符串替换题困住了
题面如下:
对输入的一行文字进行字符串替换操作。
例如输入的字符串为:My name is Chen.
执行:将Chen 替换 为 Li的操作;
得到新的字符串 My name is Li.
注意:源串中可能有多个要替换的串!
例如: abccabc
将abc替换为XYZ
得到XYZcXYZ
输入
第一行:源串 (长度小于100)
第二行:被替换的串(长度小于100)
第三行:替换的串(长度小于100)
输出
新的字符串
样例输入
My name is Chen. Chen Li
样例输出
My name is Li.
本题开始肯定是想着写一个替换函数,然后输入即可,但是偏偏OJ对此方法有排斥。。只能另寻他路。
那就只能从初步开始
现在规定,旧字符串为A,被替换的字符串为B,替换的字符串为C
将A和B判断,用字符循环判断,如果不相同,那么输出A中的与B不相同的字符,之后退出循环,
从之后第二个字符开始再判断......
在判断之前会进行循环的次数和B的长度是否相等,如果相等则说明找到了B,那么会输出A
输出后的字符位置从此加上B的长度开始再次判断直到遇到了A的‘\0’
贴个代码
#include<stdio.h>
#include<string.h>
int main()
{
int i, j, k, x, len1, len2;
char s1[205], s2[105], s3[105];
gets(s1);
scanf("%s %s", s2, s3);
len1 = strlen(s1);
len2 = strlen(s2);
for(i = 0; i < len1; i++){
x = i;
for(j = 0; s2[j] != '\0'; j++){
if(s1[x] != s2[j]){
printf("%c", s1[i]);
break;
}
x++;
}
if(j == len2){
for(k = 0; s3[k] != '\0'; k++)
printf("%c", s3[k]);
i = i + len2 - 1;
}
}
return 0;
}