首页 > 代码库 > [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