title: 主串子串操作date: 2020-12-5 23:50:41
tags: C++
categories: 算法

code

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. //查找子串位置(0则说明查找失败)
  5. int SearchString(int pos, char s1[], char s2[])
  6. {//0 <= pos <= len1
  7. int p1 = pos - 1;
  8. int p2 = 0;
  9. int len1, len2;
  10. len1 = strlen(s1);
  11. len2 = strlen(s2);
  12. while (p1 < len1 && p2 < len2)
  13. {
  14. if (s1[p1] == s2[p2])
  15. {
  16. p1++; p2++;
  17. }
  18. else
  19. {
  20. p1 = p1 - p2 + 1;
  21. p2 = 0;
  22. }
  23. if (p2 >= len2)
  24. return p1 - p2 + 1;
  25. }
  26. return 0;
  27. }
  28. //插入子串(假设主串够大)
  29. void InputString(int pos, char s1[], char s2[])
  30. {//0 <= pos <= len1+1
  31. int i;
  32. int len1 = strlen(s1);
  33. int len2 = strlen(s2);
  34. for (i = len1 - 1 + len2; i >= pos+len2; i--)
  35. {
  36. s1[i] = s1[i - len2];
  37. }
  38. for (i = 0; i < len2; i++)
  39. {
  40. s1[pos + i] = s2[i];
  41. }
  42. cout << s1;
  43. return;
  44. }
  45. //按长度删除子串
  46. void DeleteStringOnLength(int pos,int longth,char s1[])
  47. {
  48. //memset(&s1[pos],' ', sizeof(char) * longth);
  49. int len = strlen(s1);
  50. int i;
  51. for (i = pos;i <len - longth;i++ )
  52. {
  53. s1[i] = s1[i+longth];
  54. }
  55. memset(&s1[len-longth], 0, sizeof(char) * longth);
  56. cout << s1;
  57. }
  58. //按子串删除子串
  59. int DeleteStringOnSub(char s1[], char s2[])
  60. {
  61. int pos = SearchString(0, s1, s2);
  62. if (!pos) return 0;
  63. else
  64. {
  65. int len1 = strlen(s1);
  66. int len2 = strlen(s2);
  67. int i;
  68. for (i = pos-1; i < len1 - len2; i++) //pos与按长度删除子串的一点差别
  69. {
  70. s1[i] = s1[i + len2];
  71. }
  72. memset(&s1[len1 - len2], 0, sizeof(char) * len2);
  73. }
  74. return 1;
  75. }
  76. int main()
  77. {
  78. int sum = 0;
  79. char a[30] = "abcde fc cd cddc g";
  80. char b[20] = "cd";
  81. while (1)
  82. {
  83. if (DeleteStringOnSub(a, b))
  84. {
  85. sum++;
  86. }
  87. else
  88. {
  89. break;
  90. }
  91. }
  92. cout << sum << endl;
  93. return 0;
  94. }