C++第15周(春)项目3 - OOP版电子词典(一)
课程首页在: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:这种项目。最好用多文件的形式组织
參考解答(未用多文件,请读者自行习练):
- #include <fstream>
- #include<iostream>
- #include<string>
- #include<cstdlib>
- using namespace std;
- //定义词条类
- class Word
- {
- public:
- void set(string e, string c, string wc);
- int compare(string); //英语部分与给定字符串比較,等于返回,大于返回。小于返回-1
- string getChinese();
- string getWord_class();
- private:
- string english;
- string chinese;
- string word_class;
- };
- void Word::set(string e, string c, string wc)
- {
- english=e;
- chinese=c;
- word_class=wc;
- }
- int Word::compare(string k)
- {
- return english.compare(k);
- }
- string Word::getChinese()
- {
- return chinese;
- }
- string Word::getWord_class()
- {
- return word_class;
- }
- //定义字典类
- class Dictionary
- {
- public:
- Dictionary();
- void searchWord(string k);
- private:
- int BinSeareh(int low, int high, string k);
- int wordsNum;
- Word words[8000]; //用于保存词库
- };
- Dictionary::Dictionary()
- {
- string e,c,wc;
- wordsNum=0;
- //将文件里的数据读入到对象数组中
- ifstream infile("dictionary.txt",ios::in); //以输入的方式打开文件
- if(!infile) //測试是否成功打开
- {
- cerr<<"dictionary open error!"<<endl;
- exit(1);
- }
- while (!infile.eof())
- {
- infile>>e>>c>>wc;
- words[wordsNum].set(e, c, wc);
- ++wordsNum;
- }
- infile.close();
- }
- int Dictionary::BinSeareh(int low, int high, string key)
- {
- int mid;
- while(low<=high)
- {
- mid=(low + high) / 2;
- if(words[mid].compare(key)==0)
- {
- return mid; //查找成功返回
- }
- if(words[mid].compare(key)>0)
- high=mid-1; //继续在w[low..mid-1]中查找
- else
- low=mid+1; //继续在w[mid+1..high]中查找
- }
- return -1; //当low>high时表示查找区间为空,查找失败
- }
- void Dictionary::searchWord(string key)
- {
- int low=0,high=wordsNum-1; //置当前查找区间上、下界的初值
- int index=BinSeareh(low, high, key);
- if(index>=0)
- cout<<key<<"--->"<<words[index].getWord_class()+"\t"<<words[index].getChinese();
- else
- cout<<"查无此词";
- cout<<endl<<endl;
- }
- int main( )
- {
- Dictionary dict;
- string key;
- do
- {
- cout<<"请输入待查询的关键词(英文),0000结束:"<<endl;
- cin>>key;
- if (key!="0000")
- {
- dict.searchWord(key);
- }
- }
- while(key!="0000");
- cout<<"欢迎再次使用!"<<endl<<endl;
- return 0;
- }
【项目3拓展1(选做)】使这个词典。读入一篇文章,输出对当中的所词的解释。比如。对aboutcpp.txt。输出例如以下左图结果所看到的(也能够看到当中待改进的地方)。
【项目3拓展2(选做)】试用wxwidgets做一个窗体版的电子词典,例如以下右图所看到的:
|
C++第15周(春)项目3 - OOP版电子词典(一)的更多相关文章
- C++第15周(春)项目3 - OOP版电子词典(二)
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...
- 第14周 项目三-OOP版电子词典
做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文.中文释义与词性间用'\t'隔开. (1)编程序,由用户输入英文词.显示词性和中文释义. ...
- 第十四周(OOP版电子词典)
/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名:第十四周(OOP版电子词典) *作者:王忠 *完毕日期:2015.6.10 *版本 ...
- 2013级C++第15周(春)项目——输入输出流及文件文件操作
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 本周程序阅读及程序调试中须要的文件,请到htt ...
- C++第15周(春)项目2 - 用文件保存的学生名单
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 本程序中须要的相关文件.请到http://pa ...
- OOP版电子词典
输入代码: /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名:sum123.cpp * 作 者:林海云 * 完毕日期:20 ...
- C++第11周(春)项目4 - 类族的设计
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4 - 类族的设计]按下面的提示,由基类 ...
- C++第11周(春)项目2 - 职员有薪水了
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2 - 职员有薪水了]定义一个名为CPe ...
- C++第13周(春)项目1 - 点、圆的关系
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目1 - 点.圆的关系](1)先建立一个P ...
随机推荐
- asp.net页面之间的跳转
调用Request.CurrentExecutionFilePath方法返回到当前页面 站点中常常要跳转页面,调用Request.CurrentExecutionFilePath方法能够获取当前页面的 ...
- IOS详解TableView——选项抽屉(天猫商品列表)
在之前的有篇文章讲述了利用HeaderView来写类似QQ好友列表的表视图. 这里写的天猫抽屉其实也可以用该方法实现,具体到细节每个人也有所不同.这里采用的是点击cell对cell进行运动处理以展开“ ...
- JMeter数据库性能测试
要测试一个服务器的性能,客户要求向数据库内 1000/s(每插入一千条数据)的处理能力 前提条件:一个数据库:test 数据库下面有一张表:user 表中有两个字段:username.pass ...
- Difference between enabled and userInteractionEnabled properties
I read through the documentation, and here are my findings. UIButton inherits from UIControl the boo ...
- C++11下的线程池以及灵活的functional + bind + lamda
利用boost的thread实现一个线程类,维护一个任务队列,以便可以承载非常灵活的调用.这个线程类可以方便的为后面的线程池打好基础.线程池还是动态均衡,没有什么别的.由于minGW 4.7 对 C+ ...
- .NET程序猿 - 提升幸福感的组件一览
1.Newtonsoft.Json.net 操作JSON最简便的方式. .Net 3.5开始,Framework集成Json序列化器:JavaScriptSerializer,然而Json.net给 ...
- C#读取XML配置文件
DataSource.xml文件,要放在bin/debug/目录下: <?xml version="1.0" encoding="utf-8" ?> ...
- WIN7中组件服务中的DCOM配置找不到Microsoft Excel应用程序的解决办法
转自:http://blog.csdn.net/lploveme/article/details/8215265 在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,但是却发现找不到Micro ...
- Private Members in JavaScript
Private Members in JavaScript Douglas Crockford www.crockford.com JavaScript is the world's most mis ...
- hdu 2564 词组缩写
Problem Description 定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写. 比如,C语言里常用的EOF就是end of file的缩写. Input 输入的第一行是一个整数T ...