某国有禁言单词X,输入N个单词,如果某个单词中包含禁言单词X(不分大小写),则要被出现的单词X位置要替换为"***",然后才输出。
输入格式
第一行:一个单词X,长度<10。
第二行:一个正整数N <10^5。
下面有n行,每行一个单词,长度<20。
输出格式
n行,每行一个单词。
输入样例
SB
4
Hello
Sbstring
KillsbAA
word
输出样例
Hello
***string
Kill***AA
word
样例解释
无
此题代码及思路如下:
#include<bits/stdc++.h>
using namespace std;
string s1,s2,s3,s4,s5;
int n,y;
int main(){
cin>>s1;//输入禁言单词
for(int i=0;i<s1.size();i++)
{
if(s1[i]>='a'&&s1[i]<='z')s1[i]=s1[i]-'a'+'A';//将禁言单词转化为大写
}
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s2;
while(1)
{
s3=s2;//保存单词
for(int j=0;j<s2.size();j++)
{
if(s2[j]>='a'&&s2[j]<='z')s2[j]=s2[j]-'a'+'A';//将单词转化为大写
}
y=s2.find(s1);//寻找单词中的禁言单词
if(y==-1)break;//直到没有就退出循环
s4=s3.substr(0,y);//截取前面部分
s5=s3.substr(y+s1.size(),s2.size()-y);//截取后面部分
s2=s4+"***"+s5;//保存修改过的单词,继续寻找
}
cout<<s3<<endl;
}
return 0;
}