poj 1035

一道字符串的题。。不过。。挺麻烦的。。。

  1 #include <iostream>
  2 #include<cstring>
  3 using namespace std;
  4 char dic[10005][20];
  5 char word[55][20];
  6 int diclen[10005];//字典中每个单词的长度
  7 
  8 bool change(char *a, char *b){
  9     int dif = 0;
 10     while(*a){
 11         if(*(a++)!=*(b++)){
 12             dif++;//记录不相同的字符的个数,如果大于1就不合适了。。
 13             if(dif>1)
 14                 return false;
 15         }
 16     }
 17     return true;
 18 }
 19 bool delword(char *a,char *b){
 20     int dif = 0;
 21     while(*a){//以a作为标准
 22         if(*a!=*b){
 23             dif++;
 24             a++;
 25             if(dif>1)
 26                 return false;
 27         }
 28         else{
 29             a++;
 30             b++;
 31         }
 32     }
 33     return true;
 34 }
 35 
 36 bool addword(char *a,char *b){
 37     int dif = 0;
 38     while(*b){//以b作为标准
 39         if(*a!=*b){
 40             b++;
 41             dif++;
 42             if(dif>1)
 43                 return false;
 44         }
 45         else {
 46             a++;
 47             b++;
 48         }
 49     }
 50     return true;
 51 }
 52 int main()
 53 {
 54     int dicnum = 0;
 55     while(cin>>dic[dicnum]){
 56         if(dic[dicnum][0]=='#')
 57             break;
 58         dicnum++;
 59     }
 60 
 61     int wordnum = 0;
 62     while(cin>>word[wordnum]){
 63         if(word[wordnum][0]=='#')
 64             break;
 65         wordnum++;
 66     }
 67     for(int i=0;i<dicnum;i++){//记录字典中每一个单词的长度
 68         diclen[i] = strlen(dic[i]);
 69     }
 70 
 71     for(int i=0;i<wordnum;i++){
 72         int index[10005];
 73         int iindex = 0;
 74         bool flag = false;
 75         int len = strlen(word[i]);
 76         for(int j=0;j<dicnum;j++){
 77             if(len==diclen[j]){//如果长度相同,就测是否完全相同
 78                 if(!strcmp(word[i],dic[j])){
 79                     flag = true;
 80                     break;
 81                 }
 82                 else if(change(word[i],dic[j])){
 83                     index[iindex++] = j;
 84                 }
 85             }
 86             else if(len-diclen[j]==1){//需要测的代码长。而字典中的匹配短
 87                 if(delword(word[i],dic[j]))
 88                     index[iindex++] = j;
 89             }
 90             else if(diclen[j]-len==1){//字典中的匹配单词必要测的单词多一。
 91                 if(addword(word[i],dic[j]))
 92                     index[iindex++] = j;
 93             }
 94         }
 95         if(flag){
 96             cout<<word[i]<<" is correct"<<endl;
 97         }
 98         else{
 99             cout<<word[i]<<": ";
100             for(int k=0;k<iindex;k++){//输出。。。。
101                 cout<<dic[index[k]]<<" ";
102             }
103             cout<<endl;
104         }
105     }
106 
107     return 0;
108 }
原文地址:https://www.cnblogs.com/Bang-cansee/p/3195540.html