实际是匹配子串问题,使用STL中的string::find()和string::erase()即可,自己还动手写了一遍自己的;
#include<iostream> #include<stdio.h> #include<string> using namespace std; string s; string ss; bool cmp(int index) { int i = 0; for (; i<ss.size()&&index < s.size(); index++,i++) { if (s[index] != ss[i]) return false; } if (i == ss.size()) return true; else return false; } string charge() { string str = ""; for (int i = 0; i < s.size();) { if (s[i] == ss[0]&&cmp(i)) { i=i+ss.size(); } else { str+=s[i]; i++; } } return str; } int main() { cin >> s >> ss; cout << charge() << endl; }
如果使用string中的find函数和earse函数可以更快解决;
但是需要注意的是,find()函数在寻找失败的时候返回的是string::nops,不能仅仅采用布尔判断,这个需要注意一下;
#include<iostream> #include<string> using namespace std; string s1, s2; int main() { cin >> s1 >> s2; while (s1.find(s2,0)!=string::npos) { int index = s1.find(s2); cout << index << endl; s1.erase(index, s2.size()); } cout << s1 << endl; }