大致题意:
输入一部字典,输入若干单词
1、 若某个单词能在字典中找到,则输出corret
2、 若某个单词能通过 变换 或 删除 或 添加一个字符后,在字典中找得到,则输出这些单词,输出顺序根据 输入的那部字典的字典序
输入一部字典,输入若干单词
1、 若某个单词能在字典中找到,则输出corret
2、 若某个单词能通过 变换 或 删除 或 添加一个字符后,在字典中找得到,则输出这些单词,输出顺序根据 输入的那部字典的字典序
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;
}