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
思路分析:
问题:
- 如何输入的两个字符串;
- 怎么保存两个字符串;
- 如何查找在S1中查找到S2字串的位置;
- 如何删除S1中S2的位置;
解决:
- 利用gets函数,gets只有当按下回车时才会停止,比scnanf方便;
- 利用两个字符型数组存储;
- 利用strstr(A,B)函数,找到在A中B所在位置 的首地址,返回指针;需要头文件#include<string.h>
- 采用覆盖的思想,将S1数组中S2后元素,前移动S2长度的位置进行覆盖,得到新的S1;
实现代码:
#include<string.h>
int main(){
char s1[81];
char s2[81];
gets(s1); //gets函数获取S1字符串,scanf输入时,不易取得两个字串
gets(s2); //gets函数获取S2字符串
char *place; //定义一个位置指针
int len = strlen(s2);//获取s2的长度
while(strstr(s1,s2)!= NULL){ //strstr()(string.h库函数),
place = strstr(s1,s2); //找到S1和S2中相同的首地址,返回的是指针
while(*place != '\0'){ //指针指向空跳出
*place = *(place+len);//覆盖掉s2
place++;
}
}
printf("%s",s1);
}