题目链接:点击打开链接
题目大意:给出字典中有的单词和可能出错的单词,分别以#结束,判断给出的单词是否在字典中,在字典中输出* 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;
}