近日被道字符串替换题困住了

题面如下:

 

对输入的一行文字进行字符串替换操作。

例如输入的字符串为: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;
}