现在的位置: 首页 > 综合 > 正文

poj1035_Spell checker

2013年08月19日 ⁄ 综合 ⁄ 共 944字 ⁄ 字号 评论关闭



#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;
}





抱歉!评论已关闭.