输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
输入样例:
Tomcat is a male ccatat
cat
输出样例:
Tom is a male
其实这道题可能比较难处理的是这个如何删除2个cat。我采用的方法是当删除了一个cat之后,将后面的字符向前补位,之后重头开始再删除。
code:
#include<stdio.h>
#include<string.h>
int main()
{
int lenght1,lenght2;
int i,j,k,l;
int is_change=0; //is_change来判断是否删除了s2,0表示没有,1表示有
char s1[160],s2[160];
// scanf("%s",&s1);
// scanf("%s",&s2);
gets(s1);
gets(s2); //使用gets函数来输入字符串
lenght1=strlen(s1);
lenght2=strlen(s2); //计算s1与s2的长度
for(i=0;i<lenght1;i++){
if(s1[i]==s2[0]){ //当s1有字符等于s2[0]时就开始判断可否删除
for(k=i,j=0;j<lenght2;k++,j++){
if(s1[k]==s2[j]){
if(j==lenght2-1){ //此时s1中有s2
for(l=i;l<=lenght1-1;l++){
s1[l]=s1[l+lenght2]; //后面的字符补位
}
is_change=1; //此时s1被删除
}
}
else{break;}
}
}
lenght1=strlen(s1); //重新计算s1长度
if(is_change==1){
i=-1; //如果被删除了,则i=-1,之后i++变为0,s1从头开始判断是否还可以继续删除
is_change=0;
}
}
puts(s1); //输出
return 0;
}
注意:这个gets(s1)和gets(s2)不可以用printf("%s",&s1);这样的话输入tomcat is a male ccatat后,s1只是tomcat。因为printf()这个遇到空格就停止输入了,老坑了,我那时没有注意到这一点,搞得我想了好久:(