【项目-OOP版电子词典】

做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。
(1)编程序,由用户输入英文词,显示词性和中文释义。
提示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);  //英语部分与给定字符串比较,等于返回,大于返回,小于返回-1string 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]中查找elselow=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();elsecout<<"查无此词";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;
}

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

[参考解答]

#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);  //英语部分与给定字符串比较,等于返回,大于返回,小于返回-1string 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();string 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]中查找elselow=mid+1; //继续在w[mid+1..high]中查找}return -1; //当low>high时表示查找区间为空,查找失败
}string Dictionary::searchWord(string key)
{int low=0,high=wordsNum-1;  //置当前查找区间上、下界的初值int index=BinSeareh(low, high, key);if(index>=0)return words[index].getWord_class()+words[index].getChinese();elsereturn "查无此词";
}int main( )
{Dictionary dict;ifstream txtfile("aboutcpp.txt",ios::in);  //以输入的方式打开文件if(!txtfile)       //测试是否成功打开{cerr<<"text file open error!"<<endl;exit(1);}string word; //待查的词while (txtfile>>word){cout<<word<<"<------ "<<dict.searchWord(word)<<endl;}txtfile.close();return 0;
}

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

[参考解答] 见:http://blog.csdn.net/sxhelijian/article/details/28228549

C++实践参考——OOP版电子词典相关推荐

  1. 项目-OOP版电子词典

    问题及代码: /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李磊涛 *完成时间:2016年6月2 ...

  2. c语言函数设计星号,《C语言及程序设计》实践参考——函数版星号图

    返回:贺老师课程教学链接  项目要求 [项目1-函数版星号图] 这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能. (1)补充完下面的程序,使程序输 ...

  3. Qt版电子词典(qss)

    代码内有注释 源码:https://github.com/qingyiz/Dict_qt 效果图:

  4. 我为什么要用电子词典

    电子词典刚刚出现的那会儿,大概是10年以前,品牌比较少,大概主要有快译通和文曲星的一些早期版本.英语学习者奔走相告,为终于能够放下大部头的词典而欢欣鼓舞. 可也是在那时,但凡英语专家和真正高水准的英语 ...

  5. python自己做电子词典_python实现电子词典

    本文实例为大家分享了python实现电子词典的具体代码,供大家参考,具体内容如下 服务端 #!/usr/bin/env python3 from __future__ import unicode_l ...

  6. 深入理解java虚拟机 - jvm高级特性与最佳实践(第三版)_JVM虚拟机面试指南:年薪30W以上高薪岗位需求的JVM,你必须要懂!...

    JVM的重要性 很多人对于为什么要学JVM这个问题,他们的答案都是:因为面试.无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎.不管是工作还是面试中,JVM都是必考题.如果不懂JVM的话,薪 ...

  7. 实现电子词典_它是一部电子词典,一部翻译机,一部口语机还是一部出游的随身WiFi...

    科技扒爷带你看 有了小爱老师,一定程度上解决了英语学习的问题.它是一部电子词典.一部翻译机,一部口语机.还是一部出游的随身WiFi. 外观上,全白配色,磨砂质感的塑料机身,3.97英寸LCD触摸屏,操 ...

  8. 手机电子词典_网易有道入局,「智能化」能拯救电子词典这个「老古董」吗?...

    电子产品,向来代表着「新奇」和「进步」.但进步同时也意味着速朽,上一代造物不断被后继者兼并.取代.于是,软盘.小灵通.VCD 等名词一个个从市场上消隐,进入互联网「前浪」们的回忆. 但有个领域似乎独立 ...

  9. MATLAB 手把手带你制作第一个APP designer程序(电子词典)

    注:左上角图标的添加方式(老版本和新版本俩种方法)放在文章最后 注此方法针对的为2019版本及之前的版本,比较新版本以增添该功能,直接设置uifigure的Icon属性即可,使用压缩包内文件可将sta ...

最新文章

  1. 关于Java中next() nextLine()的区别
  2. SAP财务管控 财务总监背后的“管理大师” PDF下载
  3. ORACLE8的分区管理
  4. Java多线程技术-Volatile关键字解析
  5. java图像处理之查找表实现图像处理加速
  6. 你如何摆平秋季问题皮肤
  7. 检索有关计算机系统功能设计方面的文献,文献检索系统
  8. 编写程序模拟“主人”喂养“宠物”的场景,利用多态的思想!!!
  9. idea 使用 springboot框架开发时,自定义创建 yml文件,系统无法识别。yml文件没有spring的小叶子。完美解决
  10. String:字符串常量池
  11. java导出word的几种方式
  12. 【mysql】扩展-常用函数
  13. 【C++】一次遇到的需要加入const属性的情况
  14. 帆软报表Tomcat 发布部署
  15. 通俗讲解光线追踪原理,一文理清各类光线追踪
  16. 愿你永远像个boy,找到自己的光亮
  17. 盘点8个国内外知名表单软件平台,你知道几个?
  18. java接口可以被继承吗
  19. jdk1.8下载与安装教程(win10)超详细
  20. Android波纹进度条 轻松地让它浪起来

热门文章

  1. java笔记javaweb部分
  2. ELK技术栈—Logstash—基础介绍
  3. MAC 安装jenkins
  4. Android模拟位置出错IllegalArgumentException: Incomplete location object, missing timestamp or accuracy?
  5. pymysql 模块 使用目录
  6. 后端接口的幂等性(转)
  7. hibernate 学习笔记1
  8. [Linux]结合awk删除hdfs指定日期前的数据
  9. 【C++】智能指针简述(五):解决循环引用的weak_ptr
  10. 获取Web.config配置节