每个单词,如果字典里存在,输出”该单词 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\n");
else printf(":%s\n",print);
n++;
}
return 0;
}