POJ 1035 Spell checker 字符串的练习

 

http://poj.org/problem?id=1035

 

给定一系列字符串作为标准单词,以#结束

输入一系列字符串,判断是否是正确的(之前输入的),或者通过改某一个字母,删某一个字母,加某一个字母,成为正确的单词

比较时,先判断是否正确的,是则输入下一字符串,不是在判断是否能通过增删改成为正确的单词,

判断顺序:if(正确单词)

                 printf("%s is correct\n");

              else

                    {

        if(改一个字母能成为正确的单词){}

        else if(添加一个单词能成为正确单词){}

         else if(删除一个单词能成为正确单词){}

                     } 

 

  1 #include<stdio.h>

  2 #include<stdlib.h>

  3 #include<string.h>

  4 

  5 char str1[10010][55],str2[10010][55];

  6 

  7 int main()

  8 {

  9     int num1,h,a,b,count,flag=0;

 10     int i=0,j,len1,len2;

 11     while(scanf("%s",str1[i])!=EOF)                      //输入直到#结束

 12     {

 13         if(strcmp(str1[i],"#")==0)

 14             break;

 15         else

 16             i++;

 17     }

 18     num1=i;

 19     i=0;

 20     while(scanf("%s",str2[i])!=EOF)

 21     {

 22         flag=0;

 23 

 24         if(strcmp(str2[i],"#")==0)                      //输入直到#结束

 25             break;

 26         else

 27         {

 28             for(h=0;h<num1;h++)                         //判断是否是正确的单词,是,结束,输入下组字符串。不是,判断是否可以增删改

 29             {

 30                 if(strcmp(str2[i],str1[h])==0)

 31                 {

 32                     printf("%s is correct\n",str2[i]);

 33                     flag=1;break;

 34                 }

 35             }

 36             if(flag==1)

 37                 continue;

 38             printf("%s:",str2[i]);

 39             for(h=0;h<num1;h++)

 40             {

 41 

 42                 if(strlen(str1[h])==strlen(str2[i])&&strcmp(str2[i],str1[h])!=0)    //判断单词中一个字母不同的情况

 43                 {

 44                     b=0; count=0;

 45                     for(a=0;a<strlen(str1[h]);a++)

 46                     {

 47                         if(str1[h][a]==str2[i][b])

 48                         {

 49                             count++;b++;

 50                         }

 51                         else

 52                             b++;

 53                     }

 54                     //printf("%d %d %d\n",a,b,count);

 55                     if(count==strlen(str1[h])-1)

 56                         printf(" %s",str1[h]);

 57                 }

 58 

 59                 else if(strlen(str1[h])==strlen(str2[i])+1)                      //判断输出单词任意添加一个字母成为所给单词表中的字母的情况

 60                 {

 61                     b=0;

 62                     for(a=0;a<strlen(str2[i]);)

 63                     {

 64                         for(;b<strlen(str1[h]);b++)

 65                         {

 66                             if(str2[i][a]==str1[h][b])

 67                                 a++;

 68                         }

 69                         if(b==strlen(str1[h]))

 70                             break;

 71                     }

 72                     if(a==strlen(str2[i]))

 73                         printf(" %s",str1[h]);

 74                 }

 75                 else if(strlen(str2[i])==strlen(str1[h])+1)                       //判断输出单词任意删除一个字母成为所给单词表中的字母的情况

 76                 {

 77                     b=0;

 78                     for(a=0;a<strlen(str1[h]);)

 79                     {

 80                         for(;b<strlen(str2[i]);b++)

 81                         {

 82                             if(str1[h][a]==str2[i][b])

 83                                 a++;

 84                         }

 85                         if(b==strlen(str2[i]))

 86                             break;

 87                     }

 88                     if(a==strlen(str1[h]))

 89                     {

 90 

 91                         printf(" %s",str1[h]);

 92                     }

 93                 }

 94                 if(h==num1-1)

 95                     printf("\n");

 96             }

 97         }

 98 

 99         i++;

100     }

101 }
View Code

 

你可能感兴趣的:(check)