一道字符串的题。。不过。。挺麻烦的。。。
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 }