输入格式:

输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。

输出格式:

在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

输入样例:

Tomcat is a male ccatat
cat

结尾无空行

输出样例:

Tom is a male 

结尾无空行

#include<stdio.h>
#include<string.h>
int main(){
    char a[100],b[100];
    gets(a);
    gets(b);
    int m=strlen(a);
    int n=strlen(b);
    int i,j,k,d=0,e=0;
    do{                                            //最外层循环防止去除cat后剩余字符串仍能构成新的cat
        d=0;
        for(i=0;i<m;i++){                    //嵌套循环判定是否有连续字符串与s2相等
            k=0;
            for(j=i;j<i+n;j++){            
                if(b[k]!=a[j])
                    break;
                k++;
            }
            if(k==n){                            //使a数组该位置起的值全部等于后移n位的值即可起到去除作用
                m=m-n;                         //同时也方便最外层循环的进行
                for(j=i;j<m;j++){             //删除后s1总数减少n,所以m-n
                    a[j]=a[j+n];                 //a[i]的值发生变化需要重新判断,但也可省略,毕竟还有最外层
                }                                     //循环兜底  
                i=i-1;                              //d用于判断s1是否完全无与s2相等的地方
                d=1;
            }
        }
    }while(d!=0);
    for(i=0;i<m;i++){
        printf("%c",a[i]);
    }
    return 0;
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐