【编程小练习】删除字符串中的子串

题目内容:
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
提示:输入数据的设计使得不可能出现输出为空的情况。

输入格式:
输入分别给出2个每个不超过80个字符长度的不带空格的非空字符串,对应S1和S2。

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

输入样例:
Thisisatest is

输出样例:
Thatest

思路:把输入字符串中第一次出现与子串相匹配的字符串删除,然后再次判断删除后的字符串中,是否存在与子串相同的字符串,如有相同,再次删除,直到没有相同的为止。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

char * del(char *p1,char *sp1,char s2[],char result[]);
int main()
{
    char s1[80]={"bbcbbccc"},s2[80]={"bc"};
    //char s1[80]={"Thisisatest"},s2[80]={"is"};
    /*char s1[80],s2[80];
    printf("输入字符串s1,长度不超过80:");
    scanf("%s",s1);
    printf("输入字符串s2,长度不超过80:");
    scanf("%s",s2);*/
    char *p1,result[80]={'\0'},*sp1;
    p1=s1;
    sp1=s1;
    for (int i=0;i<sizeof(s1);i++)
            result[i]=s1[i];
    char temp[sizeof(result)];
    while (strstr(result,s2)!=NULL)
    { 
        for (int i=0;i<sizeof(result);i++)
            temp[i]=result[i];
        result[0]='\0';
        del(temp,temp,s2,result);
    }
    if (result[0]=='\0')
        printf("NULL");
    else printf("%s",result);

    return 0;
}

char * del(char *p1,char *sp1,char s2[],char result[])
{
    while((p1=strstr(sp1,s2))!=NULL)
    {
        char c=*p1;
        *p1='\0';

        strcat(result,sp1);
        *p1=c;

        for (int i=0;i<strlen(s2);i++)
            p1++;
        sp1=p1;
    }
    strcat(result,sp1);
    return result;
}

程序中s1为bbcbbccc,s2为bc,第一次删除为bbbccc,第二次为bbcc,第三次为bc,最后输出为NULL。

阅读更多
文章标签: c语言
个人分类: 编程学习
上一篇【编程小练习】学生成绩简单统计
下一篇欢迎使用CSDN-markdown编辑器
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭