PKU 1035 Spell checker(Vector+String应用)

题目大意:原题链接

1输入一个字符串,如果字典中存在该字符串,直接输出,否则;

2.删除,替换,或插入一个字母。如果使得输入字符串==字典中已经有的单词,输出该单词,否则。

3.直接输入下一个字符串,继续匹配.

#include<vector>
#include<string>
#include<iostream>
using namespace std;
string s;
int main(){
    vector<string> dict;
    while(cin>>s){
        if(s=="#") break;
        dict.push_back(s);
    }
    while(cin>>s){
        if(s=="#") break;
        cout<<s;
        int len1=s.size();
          bool sign=false;
          for(int i=0;i<dict.size();i++){
            if(s==dict[i]){
                cout<<" is correct"<<endl;
                sign=true;break;
            }
          }
          if(!sign){
            cout<<":";
            //枚举字典中每一个单词进行查找 
              for(int i=0;i<dict.size();i++){
                int len2=dict[i].size();
                int d=0,delta=len2-len1;
                if(delta>1||delta<-1) continue; 
                if(delta==-1){//删除 
                    for(int j=0;j<len1;j++){
                        if(s[j]==dict[i][d])
                            d++;
                    }
                    if(d==len2) cout<<' '<<dict[i];
                }
                else if(delta==0){//替换 
                       for(int j=0;j<len1;j++){
                        if(s[j]!=dict[i][j])
                            d++;
                       }
                    if(d==1) cout<<' '<<dict[i];
                }
                else if(delta==1){//插入 
                    for(int j=0;j<len2;j++){
                        if(s[d]==dict[i][j])
                            d++;
                    }
                    if(d==len1) cout<<' '<<dict[i];
                }
            }
              cout<<endl;
          }
    }
}

 

posted @ 2017-02-19 17:17  despair_ghost  阅读(144)  评论(0编辑  收藏  举报