3、 若某个单词无论操作与否都无法在字典中找得到,则输出空
#include <cstdio> #include <cstring> #include<iostream> using namespace std; char dict[10001][16]; char word[51][16]; int DictNum=0; int WordNum=0; void Input(void); bool Change(char *word,char *dir); bool Del(char *word,char *dict); bool Add(char *word,char *dict); void Input(void) { while(cin>>dict[DictNum] && dict[DictNum++][0]!='#'); while(cin>>word[WordNum] && word[WordNum++][0]!='#'); --DictNum; --WordNum; return; } bool Change(char *word,char *dict) { int dif=0; while(*word) { if(*(word++) != *(dict++)) { dif++; if(dif>1) return false; } } return true; } bool Del(char *word,char *dict) { int dif=0; while(*word) { if(*word!=*dict) { word++; dif++; if(dif>1) return false; } else { word++; dict++; } } return true; } int main() { Input(); int *Dictlen=new int[DictNum]; for(int i=0; i<DictNum; ++i) Dictlen[i]=strlen(dict[i]); for(int i=0; i<WordNum; ++i) { int *address=new int[DictNum]; int pa=0; bool flag=false; int len=strlen(word[i]); for(int k=0; k<DictNum; ++k) { if(Dictlen[k]==len) { if(!strcmp(word[i],dict[k])) { flag=true; break; } else if(Change(word[i],dict[k])) { address[pa++]=k; } } else if(len-Dictlen[k]==1) { if(Del(word[i],dict[k])) address[pa++]=k; } else if(Dictlen[k]-len==1) { if(Del(dict[k],word[i])) address[pa++]=k; } } if(flag) cout<<word[i]<<" is correct"<<endl; else { cout<<word[i]<<":"; for(int j=0; j<pa; ++j) cout<<' '<<dict[address[j]]; cout<<endl; } delete address; } return 0; }