机试真题 删除匹配子串
实际是匹配子串问题,使用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;
}

浙公网安备 33010602011771号