注:该算法摘自讨论区
题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
样例输入
in
#include
int main()
{
printf(" Hi ");
}
样例输出
#clude
tma()
{
prtf(“Hi”);
}
代码展示
#include<cstdio>
#include<cstring>
int main()
{
int k = 0;
char a[10000], ans[10000]; // ans存放最终处理的结果 a存放每次输入的字符串
char temp[100]; // temp存放待处理的短字符串
gets(temp);
for(int i = 0; i < strlen(temp); i++)
{
if(temp[i] >= 'A' && temp[i] <= 'Z')
temp[i] += 'a' - 'A'; // 不区分大小写,先把大写转换为小写
}
int len = strlen(temp);
while(scanf("%c", &a[k]) != EOF) // 一个一个字符处理
{
ans[k] = a[k];
if(a[k] >= 'A' && a[k] <= 'Z')
a[k] += 'a' - 'A';
if(a[k] == temp[len - 1]) // 倒着处理,如果该字符和短字符串的最后一个相等
{
int i = 0, t = 0;
for(i = k - len + 1; i <= k; i++)
{
if(temp[t++] != a[i])
break;
}
if(i == k + 1)
k = k - len + 1; // 覆盖掉
else
k++;
}
else
k++;
}
for(int i =0 ; i < k; i++)
{
if(ans[i] != ' ')
printf("%c", ans[i]); // 去掉空格
}
printf("\n");
}