机试真题 删除匹配子串

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

  

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12676314.html