做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。

(1)编程序,由用户输入英文词。显示词性和中文释义。

提示1:假设要用OOP完毕这个词典(当然也能够用OO方法实现),能够定义一个Word类表示一个词条,当中的数据成员string english; 表示英文单词。string chinese;表示相应中文意思,string word_class;表示该词的词性;还能够定义一个Dictionary类,用来表示词典,当中Word words[8000]成员表示词典中的词条,int wordsNum;表示词典中的词条数,在构造函数中从文件读入词条,而专门添加一个成员函数用于查单词。

提示2:文件里的词汇已经排序。故在查找时。用二分查找法提高效率。

提示3:这种项目,最好用多文件的形式组织

(2)(选做)使用这个词典,读入一篇文章,输出对当中的所词的解释。比如。对aboutcpp.txt,输出例如以下左图结果所看到的(也能够看到当中待改进的地方)。

(3)(选做)试用wxwidgets或MFC,做一个窗体版的电子词典,如上右图所看到的:

  1. #include <fstream>
  2. #include<iostream>
  3. #include<string>
  4. #include<cstdlib>
  5. using namespace std;
  6.  
  7. //定义词条类
  8. class Word
  9. {
  10. public:
  11. void set(string e, string c, string wc);
  12. int compare(string); //英语部分与给定字符串比較,等于返回,大于返回,小于返回-1
  13. string getChinese();
  14. string getWord_class();
  15. private:
  16. string english;
  17. string chinese;
  18. string word_class;
  19. };
  20.  
  21. void Word::set(string e, string c, string wc)
  22. {
  23. english=e;
  24. chinese=c;
  25. word_class=wc;
  26. }
  27.  
  28. int Word::compare(string k)
  29. {
  30. return english.compare(k);
  31. }
  32.  
  33. string Word::getChinese()
  34. {
  35. return chinese;
  36. }
  37.  
  38. string Word::getWord_class()
  39. {
  40. return word_class;
  41. }
  42.  
  43. //定义字典类
  44. class Dictionary
  45. {
  46. public:
  47. Dictionary();
  48. void searchWord(string k);
  49. private:
  50. int BinSeareh(int low, int high, string k);
  51. int wordsNum;
  52. Word words[8000]; //用于保存词库
  53. };
  54.  
  55. Dictionary::Dictionary()
  56. {
  57. string e,c,wc;
  58. wordsNum=0;
  59. //将文件里的数据读入到对象数组中
  60. ifstream infile("dictionary.txt",ios::in); //以输入的方式打开文件
  61. if(!infile) //測试是否成功打开
  62. {
  63. cerr<<"dictionary open error!"<<endl;
  64. exit(1);
  65. }
  66. while (!infile.eof())
  67. {
  68. infile>>e>>c>>wc;
  69. words[wordsNum].set(e, c, wc);
  70. ++wordsNum;
  71. }
  72. infile.close();
  73. }
  74.  
  75. int Dictionary::BinSeareh(int low, int high, string key)
  76. {
  77. int mid;
  78. while(low<=high)
  79. {
  80. mid=(low + high) / 2;
  81. if(words[mid].compare(key)==0)
  82. {
  83. return mid; //查找成功返回
  84. }
  85. if(words[mid].compare(key)>0)
  86. high=mid-1; //继续在w[low..mid-1]中查找
  87. else
  88. low=mid+1; //继续在w[mid+1..high]中查找
  89. }
  90. return -1; //当low>high时表示查找区间为空。查找失败
  91. }
  92.  
  93. void Dictionary::searchWord(string key)
  94. {
  95. int low=0,high=wordsNum-1; //置当前查找区间上、下界的初值
  96. int index=BinSeareh(low, high, key);
  97. if(index>=0)
  98. cout<<key<<"--->"<<words[index].getWord_class()+"\t"<<words[index].getChinese();
  99. else
  100. cout<<"查无此词";
  101. cout<<endl<<endl;
  102. }
  103.  
  104. int main( )
  105. {
  106. Dictionary dict;
  107. string key;
  108.  
  109. do
  110. {
  111. cout<<"请输入待查询的关键词(英文),0000结束:"<<endl;
  112. cin>>key;
  113. if (key!="0000")
  114. {
  115. dict.searchWord(key);
  116. }
  117. }
  118. while(key!="0000");
  119. cout<<"欢迎再次使用。"<<endl<<endl;
  120. return 0;
  121. }
  1. #include <fstream>
  2. #include<iostream>
  3. #include<string>
  4. #include<cstdlib>
  5. using namespace std;
  6.  
  7. //定义词条类
  8. class Word
  9. {
  10. public:
  11. void set(string e, string c, string wc);
  12. int compare(string); //英语部分与给定字符串比較,等于返回,大于返回,小于返回-1
  13. string getChinese();
  14. string getWord_class();
  15. private:
  16. string english;
  17. string chinese;
  18. string word_class;
  19. };
  20.  
  21. void Word::set(string e, string c, string wc)
  22. {
  23. english=e;
  24. chinese=c;
  25. word_class=wc;
  26. }
  27.  
  28. int Word::compare(string k)
  29. {
  30. return english.compare(k);
  31. }
  32.  
  33. string Word::getChinese()
  34. {
  35. return chinese;
  36. }
  37.  
  38. string Word::getWord_class()
  39. {
  40. return word_class;
  41. }
  42.  
  43. //定义字典类
  44. class Dictionary
  45. {
  46. public:
  47. Dictionary();
  48. string searchWord(string k);
  49. private:
  50. int BinSeareh(int low, int high, string k);
  51. int wordsNum;
  52. Word words[8000]; //用于保存词库
  53. };
  54.  
  55. Dictionary::Dictionary()
  56. {
  57. string e,c,wc;
  58. wordsNum=0;
  59. //将文件里的数据读入到对象数组中
  60. ifstream infile("dictionary.txt",ios::in); //以输入的方式打开文件
  61. if(!infile) //測试是否成功打开
  62. {
  63. cerr<<"dictionary open error!"<<endl;
  64. exit(1);
  65. }
  66. while (!infile.eof())
  67. {
  68. infile>>e>>c>>wc;
  69. words[wordsNum].set(e, c, wc);
  70. ++wordsNum;
  71. }
  72. infile.close();
  73. }
  74.  
  75. int Dictionary::BinSeareh(int low, int high, string key)
  76. {
  77. int mid;
  78. while(low<=high)
  79. {
  80. mid=(low + high) / 2;
  81. if(words[mid].compare(key)==0)
  82. {
  83. return mid; //查找成功返回
  84. }
  85. if(words[mid].compare(key)>0)
  86. high=mid-1; //继续在w[low..mid-1]中查找
  87. else
  88. low=mid+1; //继续在w[mid+1..high]中查找
  89. }
  90. return -1; //当low>high时表示查找区间为空,查找失败
  91. }
  92.  
  93. string Dictionary::searchWord(string key)
  94. {
  95. int low=0,high=wordsNum-1; //置当前查找区间上、下界的初值
  96. int index=BinSeareh(low, high, key);
  97. if(index>=0)
  98. return words[index].getWord_class()+words[index].getChinese();
  99. else
  100. return "查无此词";
  101. }
  102.  
  103. int main( )
  104. {
  105. Dictionary dict;
  106. ifstream txtfile("aboutcpp.txt",ios::in); //以输入的方式打开文件
  107. if(!txtfile) //測试是否成功打开
  108. {
  109. cerr<<"text file open error!"<<endl;
  110. exit(1);
  111. }
  112. string word; //待查的词
  113. while (txtfile>>word)
  114. {
  115. cout<<word<<"<------ "<<dict.searchWord(word)<<endl;
  116. }
  117. txtfile.close();
  118. return 0;
  119. }

点击打开链接

第14周 项目三-OOP版电子词典的更多相关文章

  1. C++第15周(春)项目3 - OOP版电子词典(一)

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序中须要的相 ...

  2. C++第15周(春)项目3 - OOP版电子词典(二)

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...

  3. 第十四周(OOP版电子词典)

    /* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名:第十四周(OOP版电子词典) *作者:王忠 *完毕日期:2015.6.10 *版本 ...

  4. OOP版电子词典

    输入代码: /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名:sum123.cpp * 作 者:林海云 * 完毕日期:20 ...

  5. wxWidgets+wxSmith版电子词典

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...

  6. 十二周项目三(4)——出口fibnacci第一序列20的数量

    /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名:test.cpp * 作者:陈丹妮 * 完毕日期:2014年 11 月 ...

  7. 第十六周 项目三-max带来的冲突

    分析以下程序出现的编译错误,给出解决的方案. #include<iostream> using namespace std; //定义函数模板 template<class T> ...

  8. 吴裕雄--天生自然python学习笔记:python 用firebase实现英文电子词典

    Firebase 版电子词典 学英语是许多 人一辈子的麻烦 . 所以本例中,我们开发一个英汉词典,用户执 行程序后,单击“翻译”按钮即可显示该单词的中文翻译 . 英汉词典标准版 因为这个案例的数据必须 ...

  9. Surprise团队第三周项目总结

    Surprise团队第二周项目总结 项目进展 这周我们小组的项目在上周的基础上进行了补充,主要注重在注册登录界面的实现,以及关于数据库的一些学习. 在设计注册登录界面时,每一块的地方控件都不一样,比如 ...

随机推荐

  1. (待解决问题)nowrap在table和td都设置了宽度的时候仍然有效

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. codeforces 620E. New Year Tree dfs序+线段树+bitset

    题目链接 给一棵树, 每个节点有颜色, 两种操作, 一种是将一个节点的子树全都染色成c, 一种是查询一个节点的子树有多少个不同的颜色, c<=60. 每个节点一个bitset维护就可以. #in ...

  3. poj 2356

    http://poj.org/problem?id=2356 方法一:  鸽巢原理 解题思路:  n个数,,依次求其s[0],s[1],s[2],s[3].....s[n]  然后对 n取模,,必然会 ...

  4. 海量Web日志分析 用Hadoop提取KPI统计指标

    http://blog.fens.me/hadoop-mapreduce-log-kpi/ http://dongxicheng.org/search-engine/scribe-installati ...

  5. JAVA用JNI方法调用C代码实现HelloWorld

    一.首先是java运行环境的搭建,到官网下载java jdk安装即可(注意要修改环境变量).还可以顺便安装eclipse. 二.编写java代码,文件名HelloWorld.java public c ...

  6. 关于String和StringBuffer的理解问题:指针、变量的声明、变量的值的变化

    问题描述: 首先,看一个小的测试程序: public static void main(String[] args) { testStringBuffer test = new testStringB ...

  7. BZOJ 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐

    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按F ...

  8. [上海] 携程 门票事业部 招聘.NET 架构师 2 名 - V2EX

    [上海] 携程 门票事业部 招聘.NET 架构师 2 名 - V2EX [上海] 携程 门票事业部 招聘.NET 架构师 2 名

  9. 如何提高banner设计含量--网上的一篇文章--感悟

    "修改": 本质上是改什么?改大小?图片?文字?颜色? 老板说:修改本质上是提高“设计含量”.检测一个作品设计含量的高低,可以将作品中每一个设计元素进行分析,看它的“属性”与“操作 ...

  10. Unity3D游戏开发之小地图的实现

    今天我们来讲一下在Unity3D中怎样实现小地图.首先,我们来一起看看终于实现的效果: 要实现小地图效果,须要实现对于小地图和角色的绘制,所以这里须要用到OnGUI()方法,我们一起来看代码: [cs ...