课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759。内有完整教学方案及资源链接

【项目3-OOP版电子词典】(本程序中须要的相关文件,请到http://pan.baidu.com/s/1qW59HTi下载。)

  做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。
  编程序,由用户输入英文词。显示词性和中文释义。
  提示1:假设要用OOP完毕这个词典(当然也能够用OO方法实现),能够定义一个Word类表示一个词条。当中的数据成员string english; 表示英文单词,string chinese;表示相应中文意思,string word_class;表示该词的词性;还能够定义一个Dictionary类,用来表示词典,当中Word words[8000]成员表示词典中的词条,int wordsNum;表示词典中的词条数,在构造函数中从文件读入词条,而专门添加一个成员函数用于查单词。
  提示2:文件里的词汇已经排序,故在查找时,用二分查找法提高效率。

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

參考解答(未用多文件,请读者自行习练):

  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. }

  【项目3拓展1(选做)】使这个词典。读入一篇文章,输出对当中的所词的解释。比如。对aboutcpp.txt。输出例如以下左图结果所看到的(也能够看到当中待改进的地方)。
  【项目3拓展2(选做)】试用wxwidgets做一个窗体版的电子词典,例如以下右图所看到的:

  

  1. =================== 迂者 贺利坚 CSDN博客专栏=================
  2. |== IT学子成长指导专栏 专栏文章的分类文件夹(不定期更新) ==|
  3. |== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
  4. |== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
  5. ===== IT菜鸟起飞铺跑道。和学生一起享受快乐和激情的大学 =====

C++第15周(春)项目3 - OOP版电子词典(一)的更多相关文章

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

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

  2. 第14周 项目三-OOP版电子词典

    做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文.中文释义与词性间用'\t'隔开. (1)编程序,由用户输入英文词.显示词性和中文释义. ...

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

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

  4. 2013级C++第15周(春)项目——输入输出流及文件文件操作

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 本周程序阅读及程序调试中须要的文件,请到htt ...

  5. C++第15周(春)项目2 - 用文件保存的学生名单

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 本程序中须要的相关文件.请到http://pa ...

  6. OOP版电子词典

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

  7. C++第11周(春)项目4 - 类族的设计

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4 - 类族的设计]按下面的提示,由基类 ...

  8. C++第11周(春)项目2 - 职员有薪水了

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2 - 职员有薪水了]定义一个名为CPe ...

  9. C++第13周(春)项目1 - 点、圆的关系

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目1 - 点.圆的关系](1)先建立一个P ...

随机推荐

  1. asp.net页面之间的跳转

    调用Request.CurrentExecutionFilePath方法返回到当前页面 站点中常常要跳转页面,调用Request.CurrentExecutionFilePath方法能够获取当前页面的 ...

  2. IOS详解TableView——选项抽屉(天猫商品列表)

    在之前的有篇文章讲述了利用HeaderView来写类似QQ好友列表的表视图. 这里写的天猫抽屉其实也可以用该方法实现,具体到细节每个人也有所不同.这里采用的是点击cell对cell进行运动处理以展开“ ...

  3. JMeter数据库性能测试

    要测试一个服务器的性能,客户要求向数据库内 1000/s(每插入一千条数据)的处理能力 前提条件:一个数据库:test   数据库下面有一张表:user   表中有两个字段:username.pass ...

  4. Difference between enabled and userInteractionEnabled properties

    I read through the documentation, and here are my findings. UIButton inherits from UIControl the boo ...

  5. C++11下的线程池以及灵活的functional + bind + lamda

    利用boost的thread实现一个线程类,维护一个任务队列,以便可以承载非常灵活的调用.这个线程类可以方便的为后面的线程池打好基础.线程池还是动态均衡,没有什么别的.由于minGW 4.7 对 C+ ...

  6. .NET程序猿 - 提升幸福感的组件一览

    1.Newtonsoft.Json.net 操作JSON最简便的方式.  .Net 3.5开始,Framework集成Json序列化器:JavaScriptSerializer,然而Json.net给 ...

  7. C#读取XML配置文件

    DataSource.xml文件,要放在bin/debug/目录下: <?xml version="1.0" encoding="utf-8" ?> ...

  8. WIN7中组件服务中的DCOM配置找不到Microsoft Excel应用程序的解决办法

    转自:http://blog.csdn.net/lploveme/article/details/8215265 在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,但是却发现找不到Micro ...

  9. Private Members in JavaScript

    Private Members in JavaScript Douglas Crockford www.crockford.com JavaScript is the world's most mis ...

  10. hdu 2564 词组缩写

    Problem Description 定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写. 比如,C语言里常用的EOF就是end of file的缩写. Input 输入的第一行是一个整数T ...