zoukankan      html  css  js  c++  java
  • 【POJ 1035】Spell checker

    题意

      每个单词,如果字典里存在,输出”该单词 is correct“;如果字典里不存在,但是可以通过删除、添加、替换一个字母得到字典里存在的单词,那就输出
    “该单词:修正的单词”,并按字典里的顺序输出;如果都不存在,那就输出“单词:”就好。。。

    分析

      存下字典单词们和它们的长度,对每个要查找的单词,暴力扫描字典单词,根据单词长度,选择操作并检查。

    代码

    #include<stdio.h>
    #include<cstring>
    char c[17],dictionary[10005][17],words[52][17],print[10005];
    int n,num,len,correct,l[10005],printlen;
    void add(int i)
    {
        print[printlen++]=' ';
        for(int p=0; p<l[i]; p++)
            print[printlen+p]=dictionary[i][p];
        printlen+=l[i];
    }
    int main()
    {
        while(scanf("%s",c)&&c[0]!='#')
        {
            for(len=0; c[len]; len++)
                dictionary[num][len]=c[len];
            l[num]=len;
            num++;
        }
    
        while(scanf("%s",words[n])&&words[n][0]!='#')
        {
            printf("%s",words[n]);
            for(len=0; words[n][len]; len++);
            correct=printlen=0;
            memset(print,0,sizeof(print));
            for(int i=0; i<num&&!correct; i++)
            {
                if(l[i]>=len-1)
                {
                    int j=0;
                    while(j<len&&dictionary[i][j] ==words[n][j]) j++;
                    if(j==len&&l[i]==len)
                        correct=1;
                    else
                    {
                        if(l[i]==len)
                        {
                            while(j<len&&dictionary[i][j+1] ==words[n][j+1])j++;//替换
                            if(j==len)
                                add(i);
                        }
                        if(l[i]==len-1)
                        {
                            while(j<len-1&&dictionary[i][j] ==words[n][j+1])j++;//删除
                            if(j==len-1)
                                add(i);
                        }
                        if(l[i]==len+1)
                        {
                            while(j<len&&dictionary[i][j+1] ==words[n][j])j++;//添加
                            if(j==len)
                                add(i);
                        }
                    }
                }
            }
            if(correct) printf(" is correct
    ");
            else printf(":%s
    ",print);
            n++;
        }
        return 0;
    }
  • 相关阅读:
    数据分析的广阔前景
    验证驱动的调用者
    重构:改善既有代码的设计 精彩书评一
    谁说菜鸟不会数据分析
    编写安全的驱动程序之输入输出检查
    数据分析师的基本素质
    重构:改善既有代码的设计 精彩书评二
    Java编程思想(第4版)(评注版)
    第四章(2)Libgdx手工项目设置
    第四章(1)Libgdx项目安装、运行和调试
  • 原文地址:https://www.cnblogs.com/flipped/p/5188503.html
Copyright © 2011-2022 走看看