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

来源:互联网 发布:mac office账号注销 编辑:程序博客网 时间:2024/05/16 08:09

题目内容:
输入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。

0 0