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;
}

 

posted @ 2017-04-16 20:11  杀猪状元  阅读(197)  评论(0编辑  收藏  举报