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

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 

思路分析:

问题:

  1. 如何输入的两个字符串;
  2. 怎么保存两个字符串;
  3. 如何查找在S1中查找到S2字串的位置;
  4. 如何删除S1中S2的位置;

解决:

  1. 利用gets函数,gets只有当按下回车时才会停止,比scnanf方便;
  2. 利用两个字符型数组存储;
  3. ​利用strstr(A,B)函数,找到在A中B所在位置 的首地址,返回指针;需要头文件#include<string.h>
  4. 采用覆盖的思想,将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);
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值