POJ 1035Spell checker
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1035Spell checker相关的知识,希望对你有一定的参考价值。
题意
每个单词,如果字典里存在,输出”该单词 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; }
以上是关于POJ 1035Spell checker的主要内容,如果未能解决你的问题,请参考以下文章