poj 1035 Spell checker

来源:互联网 发布:js转换php时间戳 编辑:程序博客网 时间:2024/05/02 04:28

先给一个词典

然后给单词,错的单词通过改、增、删一个字母,输出正确的单词

#include<stdio.h>#include<string.h>char word[10010][20],s[20];int ha(int i,char *p){int j,k;int l=strlen(word[i]),len=strlen(s);int cha=l-len;if(cha<0)cha=-cha;if(cha>1)//长度差大于一的无法修改return 0;if(l==len){int bu=0;for(j=0;j<l;j++)if(word[i][j]!=s[j])bu++;if(bu==1)//长度相等时只能有一个字母不同return 1;else return 0;}if(l<len){int bu=0;for(j=0,k=0;j<=l&&k<=len;){if(word[i][j]==s[k]){j++;k++;}else{bu++;k++;//出错单词比词典词大一时,碰到不同字母,出错单词跳过去}}if(bu==1)//只能跳过一个return 1;else return 0;}if(l>len){int bu=0;for(j=0,k=0;j<=l&&k<=len;){if(word[i][j]==s[k]){j++;k++;}else{bu++;j++;//出错单词比词典词小一时,碰到不同字母,词典词跳过去}}if(bu==1)//只能跳过一个return 1;else return 0;}}int main(){int i=0,n;while(gets(word[i++])){if(word[i-1][0]=='#')break;}i--;n=i;while(gets(s)){if(s[0]=='#')break;for(i=0;i<n;i++)if(strcmp(word[i],s)==0){printf("%s is correct\n",word[i]);break;}if(i<n)continue;printf("%s:",s);for(i=0;i<n;i++){if(ha(i,s)){printf(" %s",word[i]);}}printf("\n");}return 0;}


原创粉丝点击