題目鏈接:點擊打開鏈接
題目大意:給出字典中有的單詞和可能出錯的單詞,分別以#結束,判斷給出的單詞是否在字典中,在字典中輸出* 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;
}