7-29 删除字符串中的子串

输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

输入格式

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

输出格式

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

输入样例

Tomcat is a male ccatat
cat

输出样例

Tom is a male 

分析与答案

需要动用到string.h的一道题,用两个数组s1[81]s2[81]来储存字符串和子串,然后用strstr函数找到第一次出现子串的位置,将该位置的子串之后的字符先复制,然后将该位置后的内容删除(其实也就是将指针所指的位置内容改为结束符\0),再将之前复制的字符连接到字符串里。重复上述动作,直到strstr范围NULL值。

#include <stdio.h>
#include <string.h>

int main(){
    char s1[81]={'\0'},s2[81]={'\0'},tmp[81]={'\0'};
    gets(s1);
    gets(s2);
    char *p = strstr(s1,s2);
    while (p!=NULL)
    {
        strcpy(tmp,p+strlen(s2));
        *p = '\0';
        strcat(s1,tmp);
        p = strstr(s1,s2);
    }
    printf("%s",s1);
    return 0;
}

7-29 测试点