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

输入格式:

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

输出格式:

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

输入样例:

  1. Tomcat is a male ccatat
  2. cat

输出样例:

  1. Tom is a male
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main(){
  4. char s1[100];
  5. gets(s1);
  6. char s2[100];
  7. gets(s2);
  8. int len1, len2;
  9. len1 = strlen(s1);
  10. len2 = strlen(s2);
  11. //串的模式匹配
  12. int i, j, k;
  13. int flag = 1;//标志是否修改
  14. int mod;//对照位
  15. while(flag){
  16. for(i=0; i<len1; i++){
  17. flag = 0;
  18. if(s1[i]==s2[0]){
  19. mod = 1;
  20. for(j=i,k=0; k<len2; j++,k++){
  21. if(s1[j]!=s2[k]){
  22. mod = 0;//不同,跳出匹配
  23. break;
  24. }
  25. }
  26. if(mod){//匹配成功,j=i+len2 进行删除操作
  27. for(; j<len1; i++,j++){//这里的i、j非常好
  28. s1[i]=s1[j];
  29. }
  30. for(; i<len1; i++){
  31. s1[i]='\0';
  32. }
  33. flag = 1;//存在符合要求的子串,重新扫描
  34. break;
  35. }
  36. }
  37. }
  38. }
  39. puts(s1);
  40. return 0;
  41. }
  42. //得复习一下数组和串
  43. //帮助很大 https://blog.csdn.net/u011779517/article/details/103366593