整体思路:
就是简单的查找替换
难点:
违禁词可能是另一个违禁词的子串,也可能就是<censored>,如果在查找时不做处理,在后期删除的时候可能会出现把另一个违禁词的字串删掉的现象。因此,需要在查找之前把需要代换的违禁词统一一下,在后期删除时才不会出错。
ac代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k,sum=0;
string wei[100],str;
cin>>n;getchar();
for(int i=0;i<n;++i)
{
//当时考虑了是不是违禁词有空格的问题,结果这两种输入方式都可以,所以和空格没关系
//getline(cin,wei[i]);
cin>>wei[i];
}
cin>>k;getchar();
getline(cin,str);
//查找违禁词,并且统一替换成"_"
for(int i=0;i<n;++i)
{
while(str.find(wei[i])!=-1)
{
sum++;
str.replace(str.find(wei[i]),wei[i].size(),"_");
}
}
if(sum<k)
{
//替换
while(str.find("_")!=-1)
{
str.replace(str.find("_"),1,"<censored>");
}
cout<<str<<endl;
}
else
{
cout<<sum<<endl<<"He Xie Ni Quan Jia!"<<endl;
}
}