您的位置:首页 > 其它

poj1035——Spell checker

2017-12-01 12:11 253 查看
题目大意:给出一本字典,判断输入的单词是否在字典中,或者在删除、替换、添加一个字母后是否在字典中

输入:字典中的单词(每个占一行,最多10000个)(单词长度不超过15,都是小写字母)

           #

           要检查的单词(每个占一行,最多50个)(单词长度不超过15,都是小写字母)

           #

输出:如果本来就在字典中,输出 ... is correct(...表示这个单词)

           如果修改后在字典中,输出 ...:空格***(***表示修改后的单词,按他们在字典中出现顺序输出所有方案)

           如果修改后还是不在,输出 ...:

分析:只有当待查单词与字典单词长度差值<=1时才进行比较操作

           如果长度一致,则检查不同字符个数(为1就correct)

           否则就用短的去匹配长的

代码:转载自https://www.cnblogs.com/13224ACMer/p/4697157.html

#include<stdio.h>

#include<string.h>

#include<vector>

#include<string>

#include<iostream>

#include<algorithm>

using namespace std;

string s;

int main(){

    vector<string>q;

    while(cin>>s){

        if(s=="#")

            break;

        q.push_back(s);

    }

    while(cin>>s){

            if(s=="#")

            break;

      int len=s.size();

      bool flag=false;

     cout<<s;

      for(int i=0;i<q.size();i++){

        if(s==q[i]){

            flag=true;

            cout<<" is correct"<<endl;

    break;

        }

      }

      if(!flag){

            cout<<":";

          for(int i=0;i<q.size();i++){

            int len1=q[i].size();

            int temp=len1-len;

            if(temp>1||temp<-1)

                continue;

            int d=0;

            if(temp==0){

                for(int j=0;j<len;j++){

                    if(s[j]!=q[i][j])

                        d++;

                }

                if(d==1)

                    cout<<' '<<q[i];

            }

            else if(temp==-1){//用字典单词去匹配待查单词,看看字典单词的所有字母是否都存在于待查单词中

                for(int j=0;j<len;j++){

                    if(s[j]==q[i][d]){

                        d++;

                    }

                }

                if(d==len1)

                    cout<<' '<<q[i];

            }

            else if(temp==1){//用待查单词去匹配字典单词,看看待查单词的所有字母是否都存在于字典单词中

                for(int j=0;j<len1;j++){

                    if(s[d]==q[i][j]){

                        d++;

                    }

                }

                if(d==len)

                    cout<<' '<<q[i];

            }

          }

  cout<<endl;

      }

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: