暴力解决。
先把字典里的每一个单词的长度存起来。在查找的时候。就比較长度,在多一个少一个之间找,
#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; }