POJ_1035_Spell checker(串)

题目挺简单,模拟一下就行。

题意:输入一个字典(可以用数组保存),用'#'代表输入结束。再输入一串字符,也是'#'结束。如果字典中有这个单词输出。。。is correct.如果字典中没有进行则输出可能的单词,如果连可能的单词也没有则输出原字符串就行不用输出查找的内容。

这里的可能的单词包括3种。1:可以增加一个字母在字典中找到。2:可以减少一个字母在字典中找到。3:当长度相等时可以改变一个字母在字典中找到。即分为三种情况分别来讨论就行。

注意:让你原样输出的内容

一点也不能变,不然会wr的。

  1 # include <stdio.h>
  2 # include <string.h>
  3 # include <map>
  4 struct node
  5 {
  6     char str[50];
  7     int len;
  8 }ch[100000];
  9 int l;
 10 int data[1000001];
 11 void Input()
 12 {
 13     int i;
 14     for(i=0;;i++)
 15     {
 16         scanf("%s",ch[i].str);
 17         ch[i].len=strlen(ch[i].str);
 18         if(strcmp(ch[i].str,"#")==0)
 19             break;
 20     }
 21     l=i;
 22 }
 23 int main()
 24 {
 25     int i,j,k;
 26     char c[50];
 27     Input();
 28     while(scanf("%s",c) != EOF)
 29     {
 30         if(strcmp(c,"#") == 0)
 31             break;
 32         int flag=1;
 33         for(i=0;i<l;i++)
 34         {
 35             if(strcmp(c,ch[i].str) == 0)
 36             {
 37                 printf("%s is correct\n",c);
 38                 flag=0;
 39                 break;
 40             }
 41         }
 42         int cnt=0;
 43         if(flag)
 44         {
 45             printf("%s:",c);
 46             int ll=strlen(c);
 47             for(i=0;i<l;i++)
 48             {
 49                 if(ll == ch[i].len) // change;
 50                 {
 51                     if(ll==1)
 52                         data[cnt++]=i;
 53                     else
 54                     {
 55                         int leag=0;
 56                         for(j=0;j<ll;j++)
 57                         {
 58                             if(c[j] != ch[i].str[j])
 59                                 leag++;
 60                         }
 61                         if(leag<=1)
 62                             data[cnt++]=i;
 63                     }
 64                 }
 65                 else if(ll+1 == ch[i].len)//delete;
 66                 {
 67                     int leag=0;
 68                     for(j=0,k=0;j<ch[i].len;j++)
 69                     {
 70                         if(ch[i].str[j] != c[k])
 71                             leag++;
 72                         if(leag >=2)
 73                             break;
 74                         if(ch[i].str[j] == c[k])
 75                             k++;
 76                     }
 77                     if(j == ch[i].len)
 78                         data[cnt++]=i;
 79                 }
 80                 else if(ll-1 == ch[i].len)
 81                 {
 82                     int leag=0;
 83                     for(j=0,k=0;j<ll;j++)
 84                     {
 85                         if(c[j] != ch[i].str[k])
 86                             leag++;
 87                         if(leag>=2)
 88                             break;
 89                         if(c[j] == ch[i].str[k])
 90                             k++;
 91                     }
 92                     if(j==ll)
 93                         data[cnt++]=i;
 94                 }
 95             }
 96             for(j=0;j<cnt;j++)
 97                 printf(" %s",ch[data[j]].str);
 98             printf("\n");
 99         }
100     }
101     return 0;
102 }

 

posted on 2013-08-19 14:36  随风浪子的博客  阅读(182)  评论(0编辑  收藏  举报

导航