pat字符串-02

来源:互联网 发布:中国实力知乎 编辑:程序博客网 时间:2024/06/05 20:43

字符串-02. 删除字符串中的子串(20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
白洪欢(浙江大学)

输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

输入格式:

输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。

输出格式:

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

输入样例:
Tomcat is a male ccatatcat
输出样例:

Tom is a male

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int get_address(const char * s1, const char *s2)//判断字符串中是否有子串{//printf("hh");int i, j = 0, k, len, flag, t;len = strlen(s2);for(i = 0; s1[i]; i++){flag = 1;if(s1[i] == s2[j]){k = t = i;j++;for(++t; t < k + len; t++){if(s1[t] != s2[j]){flag = -1;break;}j++;}if(flag == 1){return i;}else{j = 0;}}}return -1;}int main(){char s1[85], s2[85], *str = NULL;gets(s1);gets(s2);int len1, len2, i, flag = -1;if(strstr(s1, s2) == NULL)//如果没有子串直接输出就好了{puts(s1);}else{flag = get_address(s1, s2);//len1 = strlen(s1);len2 = strlen(s2);//printf("%d\n", flag);while(flag != -1){len1 = strlen(s1);//printf("%d\n", len1); int index = len2;for(i = flag ; i < len1 - len2; i++)//很笨的方法,逐个删除字符,不过最后还是过了,说明数据比较水{s1[i] = s1[i + index];}s1[i] = 0;//printf("%d\n", strlen(s1));puts(s1);flag = get_address(s1, s2);}puts(s1);}//puts(s2);return 0;}


0 0
原创粉丝点击