问题 C: 字符串的查找删除
时间限制: 1 Sec 内存限制: 32 MB
题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in
#include
int main()
{
printf(" Hi ");
}
样例输出
#clude
tma()
{
prtf(“Hi”);
}
提示
注:将字符串中的In、IN、iN、in删除。
经验总结
用函数,可以简化思考的过程, 匹配并且删除的思路可以好好地总结。
AC代码
#include<cstdio>
#include<cstring>
#include<cctype>
const int maxn = 400;
bool judge(char a, char b)
{
return tolower(a) == tolower(b)?1:0;
}
void DeleteSpace(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 b[])
{
int flag = 0;
for(int i = 0; i < strlen(a); i++)
{
if(judge(a[i], b[0]) == 1)
{
for(int j = 0; j < strlen(b); j++)
{
if(judge(a[i+j],b[j]) == 1)
flag = 1;
else
{
flag = 0;
break;
}
}
}
if(flag == 1)
{
int len1 = strlen(b);
int len2 = strlen(a) - len1;
for(int j = i; j < len2; j++)
a[j] = a[j + len1];
a[len2] = '\0';
flag = 0;
}
}
}
int main()
{
char str[maxn], norm[maxn];
scanf("%s", norm);
getchar();
while(gets(str))
{
DeleteSpace(str);
SearchAndDelete(str, norm);
printf("%s", str);
printf("\n");
}
return 0;
}