pku 1035 Spell checker

it2022-05-06  20

额,这题,我好想看到分类说是用trie树,可是怎么想也没什么思路,就用了暴力了

若找不到相同的单词,则相似的也只有三种情况

代码很好理解

#include<iostream> using namespace std; #define MAXN 10001 char str[MAXN][20]; bool replace(char *a,char *b) { int l1=strlen(a); int l2=strlen(b); if(l1==l2)//修改一个字符 { int i=0; while(i<l1&&a[i]==b[i])//找到第一个不同的字符的位置 i++; while(++i<l1)//看之后的字符是否相同 { if(a[i]!=b[i]) return false; } } else if(l1==l2+1)//添加一个字符的 { int i=0; while(i<l2&&a[i]==b[i]) i++; while(++i<l1)//a跳过一个字符与b比较 { if(a[i]!=b[i-1]) return false; } } else if(l1+1==l2)//删除一个字符,下面类似 { int i=0; while(i<l1&&a[i]==b[i]) i++; while(i++<l2) { if(a[i-1]!=b[i]) return false ; } } else return false; return true; } int main() { int i=0; bool flag; char c[20]; while(scanf("%s",str[i++])!=EOF&&strcmp(str[i-1],"#")!=0); i--; while(scanf("%s",c)!=EOF && strcmp(c,"#")!=0) { flag=false; for(int j=0;j<i;j++) if(strcmp(str[j],c)==0) { flag=true; break; } if(flag) printf("%s is correct\n",c); else { printf("%s:",c); for(int j=0;j<i;j++) { if(replace(str[j],c)) printf(" %s",str[j]); } printf("\n"); } } return 0; }

转载于:https://www.cnblogs.com/nanke/archive/2011/05/15/2047082.html

相关资源:数据结构—成绩单生成器

最新回复(0)