POJ1035-Spell checker

题目链接:点击打开链接

题目大意:给出字典中有的单词和可能出错的单词,分别以#结束,判断给出的单词是否在字典中,在字典中输出* is corret.,否则输出字典中可能的单词:

与字典中误差不超过一的单词。

以hw举例,若字典中有hw则只输出hw is corret.,若没有就有这样几种情况:

(1)缺一 : h,w。

(2)改一:aw,ha。

(3)增一:ahw,haw,hwa。

所以不一定是单词匹配字典,而是长的匹配短的。

//388K	282MS	
//C++	1668B
#include <cstdio>
#include <cstring>
char str1[11110][22],str[55][22];
int main()
{
    int i,j,l=0,l1=0,p,q,k;
    while(~scanf("%s",str1[l1++])&&strcmp(str1[l1-1],"#"));
    l1--;
    while(~scanf("%s",str[l++])&&strcmp(str[l-1],"#"));
    l--;
    for(i=0;i<l;i++)
    {
        int flag=0;
        for(j=0;j<l1;j++)                                          //优先查找是否与字典中的单词匹配
        {
            if(strcmp(str[i],str1[j])==0)
            {
                flag=1;
                printf("%s is correct\n",str[i]);
                break;
            }
        }
        if(!flag)                                                     //否则分三种情况,k为误差数
        {
            printf("%s:",str[i]);
            for(j=0;j<l1;j++)
            {
                p=0,q=0;k=0;
                int len=strlen(str[i]);
                int len1=strlen(str1[j]);
                if(len1<len)
                {
                    while(p<len)
                    {
                        if(str[i][p++]==str1[j][q])
                            q++;
                        else
                            k++;
                    }
                }
                else if(len<len1)
                {
                    while(q<len1)
                    {
                        if(str[i][p]==str1[j][q++])
                            p++;
                        else
                            k++;
                    }
                }
                else
                {
                    while(p<len)
                    {
                        if(str1[j][p++]!=str[i][q++])
                            k++;
                    }
                }
                if(k<=1)                                           //误差小于等于1就可以输出
                    printf(" %s",str1[j]);
            }
            printf("\n");
        }
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章