题目描述
CodeMonkey终于下定决心用情书的方式向心爱的女神表白,当他历经几天几夜写完之后才知道女神有很多不喜欢的词,所以他不得不有把这些词删掉。例如:原文是:ILOVEYOU,女神不喜欢的词是‘LV’,‘O’那么最终情书要改成IEYU。现在已知女生不喜欢的词的集合S,CodeMonkey想知道刚写的情书会改成什么样?S={“HATE”,“SHIT”,“LV”,“O”,“FUCK”,“UGLY”,“MM”}
输入
多样例输入,每个样例输入一行情书原文,原文只包含大写英文字母,原文长度不超过1000
输出
对于每个样例,若是情书被删完则输出一行“LOSER”,否则输出情书的剩余内容
样例输入
ILOVEYOU MM
样例输出
IEYU LOSER
题解:先把固定的删掉的单词按字母数从小到大排序。依次删除,同数字母删除直到没有删除为止。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
char s[10][10][10]={{"O"},{"LV","MM"},{"HATE","SHIT","FUCK","UGLY"}};
/*char s[1]={"O"};
char s[2]={"LV","MM"};
char s[3]={"HATE","SHIT","FUCK","UGLY"};*/
char ss[1010];
int main()
{
while (~scanf("%s",&ss))
{
int i,j;
char *k;
int l=strlen(ss);
while (k=strstr(ss,s[0][0]))
{
int ll=strlen(k);
for (i=1,j=0;i<ll;i++,j++)
ss[l-ll+j]=k[i];
ss[l-1]='\0';
l=l-1;
}
int f=1;
while (f)
{
f=0;
for (i=0;i<=1;i++)
while (k=strstr(ss,s[1][i]))
{
f=1;
int j1,ll=strlen(k);
for (j=2,j1=0;j<ll;j++,j1++)
ss[l-ll+j1]=k[j];
ss[l-2]='\0';
l=l-2;
}
}
f=1;
while (f)
{
f=0;
for (i=0;i<=3;i++)
while (k=strstr(ss,s[2][i]))
{
f=1;
int j1,ll=strlen(k);
for (j=4,j1=0;j<ll;j++,j1++)
ss[l-ll+j1]=k[j];
ss[l-4]='\0';
l=l-4;
}
}
if (strlen(ss)==0) printf("LOSER\n");
else printf("%s\n",ss);
}
return 0;
}