L1-101 别再来这么多猫娘了! - 团体程序设计天梯赛-练习集 (pintia.cn)
这道题比较恶心的测试点在于有两个样例违禁词中含有替换词的字串,所以要用一个词来先替换(这个占位词不能有子母或数字 否则也过不了样例)
PTA的通过率惨不忍睹,这题确实是L1里最让人想不到的题了,涉及的string字符串的处理比较考验基本功需要多练
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int n, m;
string s, forbiddenWords[110];
int main()
{
cin >> n;
cin.ignore();
for (int i = 0; i < n; i++)getline(cin, forbiddenWords[i]);
cin >> m;
if (m == 0) cout << 0 << endl << "He Xie Ni Quan Jia!"; //如果阈值为0 无论输入如何都会违规
else
{
cin.ignore();
int cnt = 0;
getline(cin, s);
for (int i = 0; i < n; i++)
{
// 找到违禁词的位置,并用另一个词代替
while (s.find(forbiddenWords[i]) != s.npos)
{
int pos = s.find(forbiddenWords[i]);
cnt++;
s.erase(pos, forbiddenWords[i].length());
s.insert(pos, "-_-");
}
}
if (cnt >= m) cout << cnt << endl << "He Xie Ni Quan Jia!";
else
{
// 找出违禁词的位置然后替换
while (s.find("-_-") != -1)
{
int t = s.find("-_-");
s.erase(t, 3);
s.insert(t, "<censored>");
}
cout << s;
}
}
return 0;
}