算法笔记1808problemC 字符串的查找删除

注:该算法摘自讨论区

题目描述

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入

输入只有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");
}

猜你喜欢

转载自blog.csdn.net/luminouswithyou/article/details/89060714