codevs 2761 脏话过滤
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 脏话过滤的主要内容,如果未能解决你的问题,请参考以下文章