检索- STL的使用 & 库函数熟悉

来源:互联网 发布:自学cda数据分析师考试 编辑:程序博客网 时间:2024/05/22 01:55

POJ1806词典

解题思路:

这道题第一反应就是用map来做,但是具体实现中遇到了许多的问题。
  • 输入如何处理?
  • string 无法用题目提示中的c语言I/O输入输出
  • 如何在map中查找存在与否

参考了网上的代码
具体解决方案如下

应用stl的map

  • 关于输入
while((tmp = cin.get()) != '\n')    {        cin.putback(tmp);//把tmp放回iostream的缓冲区        cin >> eng >> fore;        Search[fore] = eng;        cin.get();    }    while(cin >> fore)    {        iter = Search.find(fore);        if(iter != Search.end() ) cout << Search[fore]<<endl;        else         cout <<"eh"<<endl;    }

其实输入我们要解决的问题就是从读入字典对应到读入查找的那个空行

  • 首先要知道 每次cin 结束的空行都是会留在缓冲区里的
  • 所以每一次输入结束的时候都要把空行cin.get()
  • 但是中间的那条空行 就是用先读入 如果不是空行再放回缓冲区的方法来解决。

  • 关于map

    • 查找的时候 可以用find 和 count
if(Search.count(fore) != 0) cout << Search[fore]<<endl;

或者

iter = Search.find(fore);        if(iter != Search.end() ) cout << Search[fore]<<endl;

应用库函数来解决输入的问题 & char[]来储存单词,二分查找与排序解决问题。

词典里的结构定义

struct node{    char eng[12], fore[12];    bool operator < (const node &o)const {return (strcmp(fore, o.fore) < 0);}};
原创粉丝点击