3655: 网络禁用语
描述
你正在开发一个BBS系统,为了网络文明并避免一些政治敏感问题,要求你的系统里不能出现某些违禁用语。因此你的系统设计为由管理员输入若干的违禁词汇,对于帖子中的违禁词汇,系统只显示第一个字符,其他字符全部用*代替。注意查找违禁词汇时是不考虑大小写的,但修改时则要保留大小写。比如love是违禁词汇,则Love、love都是违禁词语,而帖子中的love被输出为l***,而Love输出L***。现在请您完成该功能的设计。
输入
输入数据只有一组,第一行为一个正整数n(n<=1000),接下来有n行,每行有一个英文单词,由若干个英文字母组成,不含空格(单词长度不超过20)。
接下来有若干段需要处理的文字,处理到文件结束为止,字符个数不超过10000个。
输出
输出处理后的文字,除了违禁用语,其他文字和格式不变。
样例输入
样例输出
#include<bits/stdc++.h> using namespace std; map<string,int>ma; int main() { int n,i; scanf("%d",&n); while(n--) { string s,s1; cin>>s; s1=s; int l=s.size(); for(i=0;i<l;i++) { s1[i]=tolower(s[i]); } ma[s1]=1; //map标记 } string S; getchar(); while(getline(cin,S)) { S=S+" ";//末尾加个空格 int l=S.size(); string sss,bbb; int j; for(i=0;i<l;i++) { if(S[i]>='a'&&S[i]<='z'||S[i]>='A'&&S[i]<='Z')sss+=S[i];//字符的情况 else //非字符和空格 的情况 { int ll=sss.size(); if(S[i]!=' ')//非字符 { bbb=""; for(j=0;j<ll;j++) { bbb+=tolower(sss[j]); //空字符串只能通过加来扩充 } if(ma[bbb]==1) { printf("%c",sss[0]); for(j=1;j<ll;j++) { printf("*"); } printf("%c",S[i]); } else { cout<<sss; cout<<S[i]; } } else //空格 { bbb=sss; for(j=0;j<ll;j++) { bbb[j]=tolower(sss[j]); } if(ma[bbb]==1) { printf("%c",sss[0]); for(j=1;j<ll;j++) { printf("*"); } printf("%c",i==l-1?'\n':' '); } else { cout<<sss; printf("%c",i==l-1?'\n':' '); } } sss.clear(); bbb.clear(); } } } return 0; }