输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。输出格式:在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。输入样例:Tomcat is a male ccatatcat结尾无空行输出样例:Tom is a male结尾无空行#include<stdio.h>#include<string.h>int main(
输入格式:
输入在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;
}
更多推荐
所有评论(0)