title: 主串子串操作date: 2020-12-5 23:50:41
tags: C++
categories: 算法
code
#include <iostream>#include <string>using namespace std;//查找子串位置(0则说明查找失败)int SearchString(int pos, char s1[], char s2[]){//0 <= pos <= len1 int p1 = pos - 1; int p2 = 0; int len1, len2; len1 = strlen(s1); len2 = strlen(s2); while (p1 < len1 && p2 < len2) { if (s1[p1] == s2[p2]) { p1++; p2++; } else { p1 = p1 - p2 + 1; p2 = 0; } if (p2 >= len2) return p1 - p2 + 1; } return 0;}//插入子串(假设主串够大) void InputString(int pos, char s1[], char s2[]){//0 <= pos <= len1+1 int i; int len1 = strlen(s1); int len2 = strlen(s2); for (i = len1 - 1 + len2; i >= pos+len2; i--) { s1[i] = s1[i - len2]; } for (i = 0; i < len2; i++) { s1[pos + i] = s2[i]; } cout << s1; return;}//按长度删除子串void DeleteStringOnLength(int pos,int longth,char s1[]){ //memset(&s1[pos],' ', sizeof(char) * longth); int len = strlen(s1); int i; for (i = pos;i <len - longth;i++ ) { s1[i] = s1[i+longth]; } memset(&s1[len-longth], 0, sizeof(char) * longth); cout << s1;} //按子串删除子串int DeleteStringOnSub(char s1[], char s2[]){ int pos = SearchString(0, s1, s2); if (!pos) return 0; else { int len1 = strlen(s1); int len2 = strlen(s2); int i; for (i = pos-1; i < len1 - len2; i++) //pos与按长度删除子串的一点差别 { s1[i] = s1[i + len2]; } memset(&s1[len1 - len2], 0, sizeof(char) * len2); } return 1;}int main(){ int sum = 0; char a[30] = "abcde fc cd cddc g"; char b[20] = "cd"; while (1) { if (DeleteStringOnSub(a, b)) { sum++; } else { break; } } cout << sum << endl; return 0;}