首页 > 代码库 > codevs 2761 脏话过滤

codevs 2761 脏话过滤

时间限制: 1 s
 空间限制: 8000 KB
 题目等级 : 白银 Silver
 
题目描述 Description

某论坛希望打造文明论坛,对于每个帖子需要将脏话换成*输出。

脏话有38,250,2B,BT,TMD,PIG,SHIT,FUCK。

若没有一个脏字,则此人文明。

否则不文明。

对于有重叠部分的脏话需全部替换。

输入描述 Input Description

字符串

输出描述 Output Description

修改字符串

是否文明(YES或NO)。

 

样例输入 Sample Input

322BBBTTFUCPIGKSHITMDD8

样例输出 Sample Output

32**B**TFUC***K******D8

NO

 

数据范围及提示 Data Size & Hint

字符串长度<=100.只有数字和大写字母。

 

对字符串处理存在很大缺陷。。

屠龙宝刀点击就送

#include <iostream>#include <string>#include <cstdio>using namespace std;bool flag;string str,a[9]={"38","250","2B","BT","TMD","PIG","SHIT","FUCK"};int ln,k=-1,wz[9],len[9]={2,3,2,2,3,3,4,4};bool vis[100+50];void find_(int pos){    int i=0;    while(i<ln)    {        if(str[i]==a[pos][0])        {            int x=0;            int z=i,k=i;            while(str[k]==a[pos][x]&&k<ln)            {k++;x++;}            if(x==len[pos])             {                for(int j=z;j<=z+len[pos]-1;j++) vis[j]=1;                 flag=1;            }        }        i++;    }}int main(){    cin>>str;    ln=str.length();    while(k<=6) find_(++k);    for(int i=0;i<ln;i++) if(vis[i]) str[i]=*;    cout<<str<<endl;    flag==0?printf("YES"):printf("NO");    return 0;}

 

codevs 2761 脏话过滤