您的位置:首页 > 编程语言

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

2015-04-01 22:56 363 查看
题目内容:

输入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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: