首页 > 代码库 > poj1035Spell checker
poj1035Spell checker
暴力解决。先把字典里的每个单词的长度存起来,在查找的时候,就比较长度,在多一个少一个之间找,
#include<stdio.h> #include<string.h> #include<iostream> #include<stdlib.h> #include<algorithm> #include<queue> using namespace std; char s[10005][20]; char h[20]; int w[10005],len; int show(int a) { int i,t,k; int bu=0; t=w[a]-len; if(t>1) return 1; if(t==0) { for(i=0;i<w[a];i++) { if(h[i]!=s[a][i]) {bu++;} } if(bu==1) return 0; } else { if(t==1) { for(i=0,k=0;i<w[a];) { if(h[k]!=s[a][i]) {bu++;i++;} else { i++;k++; } } if(bu==1) return 0; } else if(t==-1) { for(i=0,k=0;k<len;) { if(h[k]!=s[a][i]) {bu++;k++;} else { i++;k++; } } } if(bu==1) return 0; } return 1; } int main() { int i=0; while(scanf("%s",&s[i])) { if(s[i][0]=='#') break; w[i]=strlen(s[i]); i++; } i--; int j; while(scanf("%s",h)) { if(h[0]=='#') break; printf("%s",h); len=strlen(h); // printf("%d ,%s",i,s[0]); for(j=0;j<=i;j++) { if(w[j]==len&&strcmp(s[j],h)==0) {printf(" is correct\n"); break;} } if(j>i) { printf(":"); for(j=0;j<=i;j++) if(show(j)==0) printf(" %s",s[j]); printf("\n"); } } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。