poj1035_Spell checker

来源:互联网 发布:电影票订购软件 编辑:程序博客网 时间:2024/06/08 19:15
#include<iostream>#include<cstdio>#include<string>using namespace std;string d[10100];   //把字典定义在主函数外int n;void get_d()     //输入字典{    n=0;    char ch[20];    while(scanf("%s",ch))    {        d[n]=ch;        if(d[n]=="#")break;        else n++;    }}void check(string s)     {    int j,dif,simi=0,flg=1;    string similar[10000];//用一个数组记录相似的单词    for(int i=0; i<n; i++)    {        if(s==d[i])  //如果相同,则输出,并做记录        {            cout<<s<<" is correct"<<endl;              flg=0;            break;        }        else if(s.size()==d[i].size()) //字符数相等        {            dif=0;            for(j=0; j<s.size(); j++)                if(s[j]!=d[i][j])                {                    dif++;                    if(dif==2)break;                 }            if(dif==1)            {                similar[simi++]=d[i];            }        }        else    if(s.size()==d[i].size()+1||s.size()==d[i].size()-1)//字符数相差一个        {            int a=0,b=0;            dif=0;            while(a<=s.size()&&b<=d[i].size())            {                if(dif>1)break;                if(s[a]==d[i][b])                {                    a++;                    b++;                }                else if(s.size()>d[i].size())//这里只移动字符长的                {                    dif++;                    a++;                }                else                {                    dif++;                    b++;                }            }            if(dif==1)similar[simi++]=d[i];        }    }    if(flg) //如果没有相等的单词    {        cout<<s<<":";        if(simi>0)            for(j=0; j<=simi; j++)                cout<<" "<<similar[j];//把相似的单词逐个输出        cout<<endl;    }}int main(){   string s;    get_d();    while(cin>>s)    {        if(s=="#")break;        else            check(s);    }    return 0;}

	
				
		
原创粉丝点击