输入格式
第一行正整数N,表示屏蔽字库的条目数量,
接下来N行输入屏蔽字库的每个条目.
接下来的一行正整数M,表示样本的条目数量
接下来的M行输入样本的每个条目。
样本的每个条目的最长长度小于1024
其中样本的最小字符长度 > 屏蔽字的最大字符长度
屏蔽条目的时候需要先处理屏蔽字条目长度最长的,最后处理屏幕字条目长度最小的。
测试格式
输入:一行文字
输出:将文字需要屏蔽的字改成*以后,输出文字。
输入样例
3
你好
你好先生
UESTC2
1
你好先生,知道UESTC2代表什么吗?
测试样例
********,知道 ***** 代表什么吗?
简单字符串枚举,stl很方便,对string 库函数需要熟练使用,这里附一个链接是对string的stl使用函数介绍:http://www.cnblogs.com/wangkangluo1/archive/2011/07/22/2114118.html
#include <map>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <memory.h>
#include <algorithm>
#include <vector>
using namespace std;
bool comp(string a,string b){
return a.size()>b.size();
}
int main()
{
int n;
cin>>n;
vector<string> dic;
vector<string> smp;
string word;
while(n--)
{
cin>>word;
dic.push_back(word);
}
sort(dic.begin(),dic.end(),comp);
int m;
cin>>m;
//string smp;
while(m--)
{
cin>>word;
smp.push_back(word);
}
for(vector<string>::size_type i=0;i!=smp.size();i++)
{
word=smp[i];
int flag=0;
for(vector<string>::size_type i=0;i!=dic.size();i++)
{
string dic_tmp=dic[i];
int len=dic_tmp.size();
for(string::size_type j=0;j<=word.size()-len;j++)
{
string subs=word.substr(j,len);
if(subs==dic_tmp){
for(string::size_type k=j;k<j+len;k++)
word[k]='*';
flag=1;
break;
}
}
}
cout<<word<<endl;
}
return 0;
}