zoukankan      html  css  js  c++  java
  • 2009年北航:字符串的查找删除

    题目描述:

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

    输入:

    输入只有1组数据。
    输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

    输出:

    删除输入的短字符串(不区分大小写)并去掉空格,输出。

    样例输入:
    in
    #include 
    int main()
    {
    
    printf(" Hi ");
    }
    样例输出:
    #clude
    tma()
    {
    
    prtf("Hi");
    }
    提示:

    注:将字符串中的In、IN、iN、in删除。

    #include <iostream>
    #include <string.h>
    using namespace std;
    const int MAXN=1005;
    char a[MAXN],b[MAXN];
    int lena,lenb;
    int nex[MAXN];
    bool same(char ch1,char ch2)
    {
        if('A'<=ch1&&ch1<='Z')    ch1+=32;
        if('A'<=ch2&&ch2<='Z')    ch2+=32;
        return ch1==ch2;    
    }
    void getnext()
    {
        int i=0;
        int k=-1;
        nex[0]=-1;
        while(i<lenb)
        {
            if(k==-1||same(b[k],b[i]))
            {
                i++;
                k++;
                nex[i]=k;
            }
            else    k=nex[k];
        }
    }
    int vis[MAXN];
    void KMP()
    {
        int i=0;
        int j=0;
        while(i<lena)
        {
            if(j==-1||same(a[i],b[j]))
            {
                i++;
                j++;
            }
            else    j=nex[j];
            if(j==lenb)
            {
                int l=i-j;
                for(int z=l;z<l+lenb;z++)
                {
                    vis[z]=1;
                }
                j=0;
            }
        }
    }
    int main()
    {
        cin>>b;
        lenb=strlen(b);
        getnext();
        cin.get();
        while(cin.getline(a,MAXN))
        {
            lena=strlen(a);
            memset(vis,0,sizeof(vis));
            KMP();
            for(int i=0;i<lena;i++)
            {
                if(a[i]==' '||vis[i])    continue;
                cout<<a[i];
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    【转】C#连接mysql
    【转】深度优先算法
    【转】mysql安装
    win7NVIDIA显卡驱动升级时卡住
    【转】win7系统删除桌面IE图标
    双系统删掉一个后,所在分区无法格式化
    SQL各种JOIN
    C# 反射
    【转】C#强制转换和显式转换
    SQL Server 去除表中字段空格
  • 原文地址:https://www.cnblogs.com/program-ccc/p/5651616.html
Copyright © 2011-2022 走看看