首页 > 代码库 > [POJ1035]Spell checker
[POJ1035]Spell checker
题目大意:输入一个字典,再输入一些单词,如果单词在字典里有的则输出“*** is correct”,否则如果字典里某些单词能通过增加/删除/修改一个字符变成输入的单词,则依次输出这些单词。
思路:模拟、字符串处理。
按照题目要求模拟即可。
C++ Code:
1 #include<cstring> 2 #include<cstdio> 3 using namespace std; 4 char dic[10005][18]; 5 int n=1; 6 char s[18]; 7 int main(){ 8 while(scanf("%s",dic[n])&&dic[n][0]!=‘#‘)n++; 9 n--;10 while(scanf("%s",s)&&s[0]!=‘#‘){11 bool flag=false;12 printf("%s",s);13 for(int i=1;i<=n;i++)if(strcmp(dic[i],s)==0){//判断在字典中有该单词的情况 14 flag=true;15 break;16 }17 if(flag){18 printf(" is correct\n",s);19 continue;20 }21 putchar(‘:‘);22 for(int i=1;i<=n;i++){23 int dicL=strlen(dic[i]),sL=strlen(s);24 if(dicL-sL==1){//判断删除一个字符符合条件的情况25 int dicn=0,sn=0;26 while(dic[i][dicn]==s[sn])dicn++,sn++;27 dicn++;28 while(dic[i][dicn]==s[sn]&&dicn!=dicL&&sn!=sL)dicn++,sn++;29 if(dicn==dicL&&sn==sL)printf(" %s",dic[i]);30 }else31 if(sL-dicL==1){//判断插入一个字符符合条件的情况 32 int dicn=0,sn=0;33 while(dic[i][dicn]==s[sn])dicn++,sn++;34 sn++;35 while(dic[i][dicn]==s[sn]&&dicn!=dicL&&sn!=sL)dicn++,sn++;36 if(dicn==dicL&&sn==sL)printf(" %s",dic[i]);37 }else38 if(sL==dicL){//判断修改一个字符符合条件的情况 39 int dicn=0,sn=0;40 while(dic[i][dicn]==s[sn])dicn++,sn++;41 dicn++,sn++;42 while(dic[i][dicn]==s[sn]&&dicn!=dicL&&sn!=sL)dicn++,sn++;43 if(dicn==dicL&&sn==sL)printf(" %s",dic[i]);44 }45 }46 putchar(‘\n‘);47 }48 return 0;49 }
[POJ1035]Spell checker
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。