输入 2 个字符串 S1 和 S2,要求删除字符串 S1 中出现的所有子串 S2,即结果字符串中不能包含 S2。
输入格式:
输入在 2 行中分别给出不超过 80 个字符长度的、以回车结束的 2 个非空字符串,对应 S1 和 S2。
输出格式:
在一行中输出删除字符串 S1 中出现的所有子串 S2 后的结果字符串。
输入样例:
Tomcat is a male ccatat
cat
结尾无空行
输出样例:
Tom is a male
结尾无空行
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/14/exam/problems/809
提交:
题解:
#include<stdio.h>
#include<string.h>
int main() {
char S1[81];
char S2[81];
gets(S1);
gets(S2);
char temp[81];
char *ptr;
// strstr 函数返回在 S1 中 S2 第一次出现的位置,如果未找到则返回 NULL
while ((ptr = strstr(S1, S2)) != NULL) {
// 将 S1 中 S2 之后的字符串拷贝至 temp
strcpy(temp, ptr + strlen(S2));
// 将 S1 中 S2 开始之后的字符串置空,以便将 temp 中暂存的字符串连接到 S1 尾,从而实现删除 S1 中 S2 的效果
*ptr = '\0';
// 将 temp 连接在 S1 的终止符之后(即 ptr 的位置)
strcat(S1, temp);
}
puts(S1);
return 0;
}