Spell checker poj 1035 (串的练习)

来源:互联网 发布:卡证制作软件 编辑:程序博客网 时间:2024/06/05 14:15
大致题意:
输入一部字典,输入若干单词
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;}