主要用到string函数如find,replace;
注意如果违禁词<censored>的字串(违禁词是一个单词),此时会陷入不断地循环,这也就是运行超时的原因,由于题意说的是字符串由大小写字母、数字、空格及 ASCII 码范围内的标点符号的文字组成,可以找到违禁词时先不替换成<censored>,先替换成特殊符号,后续再将出现的特殊符号替换成<censored>
代码如下:
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
char ch[100][10];
int main()
{
int n,cnt=0;
cin>>n;
string s;
for(int i=0;i<n;i++)cin>>ch[i];
int k;
cin>>k;
cin.ignore();
getline(cin,s);
for(int i=0;i<n;i++)
{
while(s.find(ch[i])!=-1)
{
int x=s.find(ch[i]);
s.replace(x,strlen(ch[i]),"***");
cnt++;
}
}
while(s.find("***")!=-1)
{
int m=s.find("***");
s.replace(m,3,"<censored>");
}
if(cnt>=k)
{
cout<<cnt<<endl<<"He Xie Ni Quan Jia!"<<endl;
}
else
cout<<s<<endl;
return 0;
}