问题 C: 字符串的查找删除
时间限制: 1 Sec 内存限制: 32 MB
题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in #include int main() { printf(" Hi "); }
样例输出
#clude tma() { prtf("Hi"); }
提示
注:将字符串中的In、IN、iN、in删除。
经验总结
可以分两步,第一步,先将所有的空格给删除,第二步,进行搜索字符串中是否存在需要删除的字符串,这里有两种方法,一种是暴力枚举,另一种是KMP模式匹配,这一题后台字符串都很短,所以采用第一种就可以了~
AC代码
#include <cstdio>
#include <cctype>
#include <cstring>
const int maxn=400;
bool Judge(char a,char b)
{
return tolower(a)==tolower(b)?1:0;
}
void Predispose(char a[])
{
char temp[maxn]={'\0'};
int len=0;
for(int i=0;a[i]!='\0';i++)
if(a[i]!=' ')
temp[len++]=a[i];
for(int i=0;i<strlen(a);i++)
a[i]=temp[i];
}
void SearchAndDelete(char a[],char n[])
{
int flag=0;
for(int i=0;i<strlen(a);i++)
{
if(Judge(a[i],n[0])==1)
{
for(int j=0;j<strlen(n);j++)
{
if(Judge(a[i+j],n[j])==1)
flag=1;
else
{
flag=0;
break;
}
}
}
if(flag==1)
{
int len1=strlen(n);
int len2=strlen(a)-len1;
for(int j=i;j<len2;j++)
a[j]=a[j+len1];
a[len2]='\0';
i--;
flag=0;
}
}
}
int main()
{
char str[maxn],norm[maxn];
scanf("%s",norm);
getchar();
while(gets(str))
{
Predispose(str);
SearchAndDelete(str,norm);
printf("%s\n",str);
}
return 0;
}