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;
}


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