poj1035 串-字典修改查找问题

题目:输入字典,然后输入被查单词,要求与字典里的正确词进行比对,假如在字典里有这个词,输出correct,假如字典中有词跟被查词只差一个字母,插入,删除或替换,则将所有字典里符合要求的词输出,注意,输出的时候要按照字典词在字典中出现的顺序,否则错误。


思路

(1)先检查词的长度,然后去字典中逐个比对,假如词长相同,看是否在字典中,是则直接输出correct。

(2)保存当前被查词,拿字典中的词与其一个个比对,若词长相等,把此字典词与被查词比对,若只有一个字母不同,则输出字典词。

(3)若被查词长比字典词长1个字母,则逐个检查两个词的字母,若不相同,则对字典词的副本插入当前位置的被查词字母,插入之后,比较两词是否相等

(4)被查词比字典词短1个字母,,则逐个检查两个词的字母,若不相同,则对字典词的副本删除当前位置的被查词字母,删除之后,比较两词是否相等,相等则返回字典词

  
  
  
  
  1. #include<iostream> 
  2. #include<string> 
  3. #include<vector> 
  4. using namespace std; 
  5.  
  6. int ok; 
  7. int ldic,lstr; 
  8. string current; 
  9. vector<string> dic; 
  10.  
  11. void replace(string dic) 
  12.    /**只要有一个字母不同,就返回dic里的单词就好,何必一个个试不同字母呢,太SB了*/  
  13.    int count = 0; 
  14.    for(int i=0;i<dic.length();i++) 
  15.    { 
  16.       if(current[i]!=dic[i]) 
  17.         count++; 
  18.       if(count>1) 
  19.          return
  20.    } 
  21.    ok = 1; 
  22.    cout<<" "<<dic; 
  23.     
  24.     
  25. void insert(string dic) 
  26.    string tmp; 
  27.    for(int i = 0;i<current.length();i++) 
  28.    { 
  29.       if(current[i]!=dic[i]) 
  30.       { 
  31.          tmp = dic; 
  32.          tmp.insert(i,1,current[i]); 
  33.          if(tmp == current) 
  34.          { 
  35.             ok = 1; 
  36.             cout<<" "<<dic; 
  37.          } 
  38.          return
  39.       } 
  40.    } 
  41.  
  42. void del(string dic) 
  43.    string tmp; 
  44.    for(int i=0;i<dic.length();i++) 
  45.    { 
  46.       if(current[i]!=dic[i]) 
  47.       { 
  48.          tmp = dic; 
  49.          tmp.erase(i,1); 
  50.          if(tmp == current) 
  51.          { 
  52.             ok = 1; 
  53.             cout<<" "<<dic; 
  54.          } 
  55.          return
  56.       } 
  57.    } 
  58.  
  59. int main() 
  60.    while(1) 
  61.    { 
  62.       cin>>current; 
  63.       if(current=="#"
  64.          break
  65.           
  66.       dic.push_back(current); 
  67.    } 
  68.     
  69.    while(1) 
  70.    { 
  71.       cin>>current; 
  72.       if(current == "#"
  73.          break
  74.           
  75.        ok = -1; 
  76.        lstr = current.length(); 
  77.         
  78.        /*****判断是否correct**/  
  79.          
  80.         for(int i = 0;i<dic.size();i++) 
  81.         { 
  82.            if(dic[i]==current) 
  83.            { 
  84.               cout<<current<<" is correct"
  85.               ok = 0; 
  86.               break
  87.            } 
  88.         } 
  89.          
  90.         if(ok<0) 
  91.         { 
  92.            cout<<current<<":"
  93.            for(int i=0;i<dic.size();i++) 
  94.            { 
  95.               ldic = dic[i].length(); 
  96.               if(lstr == ldic) 
  97.               { 
  98.                  replace(dic[i]); 
  99.               } 
  100.               else if(lstr == ldic+1) 
  101.               { 
  102.                  insert(dic[i]); 
  103.               } 
  104.               else if(lstr == ldic - 1) 
  105.               { 
  106.                  del(dic[i]); 
  107.               } 
  108.            } 
  109.         } 
  110.         cout<<endl; 
  111.    } 
  112.         system("pause"); 
  113.         return 0; 
  114. }    

 

你可能感兴趣的:(ACM题库)