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

poj 1035 Spell checker

2013年06月30日 ⁄ 综合 ⁄ 共 1167字 ⁄ 字号 评论关闭
//需要考虑的情况比较多,要一步一步地进行模拟,要小心其值是取哪一个字符串的长度! 
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> 
using namespace std;

vector<string> v;

void is_replace(string str1, string str2) 
{
    int i, len, c = 0;
    len = str1.length();
    for (i = 0; i < len; i++){
        if (str1[i] != str2[i])
            c++; 
    } 
    if (c == 1){
        cout << " " << str2;
        return ; 
    } 
} 

void is_insert(string str1, string str2)
{
     int i, len;
     len = str1.length();
     for (i = 0; i < len; i++){
         if (str1[i] != str2[i]){
             string tmp;
             tmp = str2;
             tmp.insert(i, 1, str1[i]);
             if (tmp == str1){
                  cout << " " << str2;
                  break; 
             } 
         } 
     } 
     return ; 
} 

void is_delete(string str1, string str2)
{
     int i, len;
     len = str2.length();
     for (i = 0; i < len; i++){
         if (str1[i] != str2[i]){
             string tmp;
             tmp = str2;
             tmp.erase(i, 1);
             if (tmp == str1){
                 cout << " " << str2;
                 break;  
             } 
         } 
     } 
     return ; 
} 


int main()
{
    int i, s, len1, len2; 
    bool flag, flag1; 
    string str;
    //字典词的输入 
    while (cin >> str){
          if (str == "#")  break;
          v.push_back(str);
    }
    s = v.size();
    while (cin >> str){
          if (str == "#")  break;
          len1 = str.length(); 
          flag = flag1 = false; 
          for (i = 0; i < s; i++){
              if (str == v[i]){
                  cout << str << " is correct";
                  flag1 = true; 
                  break; 
              } 
          } 
          if (!flag1){ 
                   if (!flag){
                       cout << str << ":";
                       flag = true; 
                   }
                   for (i = 0; i < s; i++){  
                      len2 = v[i].length();
                      if (len1 == len2){
                           is_replace(str, v[i]); 
                      }
                      else if (len1 == len2 + 1){
                           is_insert(str, v[i]); 
                      }
                      else if (len1 == len2 - 1){
                           is_delete(str, v[i]); 
                      }
                   } 
          }
          cout << endl;  
    } 
    
    system("pause");
}

抱歉!评论已关闭.