• uva123 Searching Quickly


    短小而精悍的代码,把我所学的几乎都用上了,测试数据过了,只可惜不AC,挣扎了一天了,累死啦!!!!!

    View Code
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<ctype.h>
    int cmp(const void *a,const void *b)
    {
        return strcmpi((char *)a,(char *)b);
    }
    char word[210][17],iword[51][17],st[10002];
    int main()
    {
        int itop = 0, top = 0, i = 0, j = 0, k = 1, s[10001] = {0}, t = 0, r;
        char ch;
        while(gets(iword[itop]))
        {
            if(strcmp(iword[itop],"::") == 0)
                break;
            itop++;
        }
        while((ch = getchar()) != EOF)
        {
            t++;
            if(ch != '\n')
                st[i++] = ch;
            if(ch != ' ' && ch != '\n')
                word[top][j++] = ch;
            else
            {
                word[top][j] = '\0';
                top++;
                for(r = 0;r < itop; r++)
                {
                    if(strcmpi(iword[r],word[top-1]) == 0)
                    {
                        top--;
                        break;
                    }
                }
                j = 0;
                if(ch == '\n')
                {
                    st[i++] = '\0';
                    s[k++] = t;
                }
            }
        }
        qsort(word,top,sizeof(word[0]),cmp);
        for(j = 0;j < top; j++)
        {
            int len = strlen(word[j]), x = 0;
            if(strcmpi(word[j],word[j+1]) == 0)
            {
                continue;
            }
            for(r = 0;r < k; r++)
            {
                x = 0;
                while(strstr(st+s[r]+x,word[j]) != NULL)
                {
                    char *p = strstr(st+s[r]+x,word[j]), *q;
                    x = p - st+len;
                    for(q = st+s[r];q < p; q++)    
                    {
                        if(isalpha(*q))
                            putchar(tolower(*q));
                        else
                            putchar(*q);
                        
                    }
                    for(;q < p+len; q++)
                        putchar(toupper(*q));
                    for(;*q != '\0';q++)
                    {
                        if(isalpha(*q))
                            putchar(tolower(*q));
                        else
                            putchar(*q);
                        
                    }
                    puts("");
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    linux traceroute追踪路由路径
    windows中ren(rename-重命名)命令的使用方法
    excel中快速删除空白行/区域
    简单的数字查找
    centos6.5最小化安装之后装图形化界面
    Oracle 11g安装教程
    Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
    JMH简介
    Eclipse中安装和使用FindBugs
    FindBugs-IDEA插件的使用
  • 原文地址:https://www.cnblogs.com/SDUTYST/p/2605112.html
Copyright © 2020-2023  润新知