第14周 项目三-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:这种项目,最好用多文件的形式组织
(2)(选做)使用这个词典,读入一篇文章,输出对当中的所词的解释。比如。对aboutcpp.txt,输出例如以下左图结果所看到的(也能够看到当中待改进的地方)。
(3)(选做)试用wxwidgets或MFC,做一个窗体版的电子词典,如上右图所看到的:
- #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;
- }
- #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();
- 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]中查找
- else
- low=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();
- else
- return "查无此词";
- }
- 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;
- }
第14周 项目三-OOP版电子词典的更多相关文章
- C++第15周(春)项目3 - OOP版电子词典(一)
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序中须要的相 ...
- C++第15周(春)项目3 - OOP版电子词典(二)
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...
- 第十四周(OOP版电子词典)
/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名:第十四周(OOP版电子词典) *作者:王忠 *完毕日期:2015.6.10 *版本 ...
- OOP版电子词典
输入代码: /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名:sum123.cpp * 作 者:林海云 * 完毕日期:20 ...
- wxWidgets+wxSmith版电子词典
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...
- 十二周项目三(4)——出口fibnacci第一序列20的数量
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名:test.cpp * 作者:陈丹妮 * 完毕日期:2014年 11 月 ...
- 第十六周 项目三-max带来的冲突
分析以下程序出现的编译错误,给出解决的方案. #include<iostream> using namespace std; //定义函数模板 template<class T> ...
- 吴裕雄--天生自然python学习笔记:python 用firebase实现英文电子词典
Firebase 版电子词典 学英语是许多 人一辈子的麻烦 . 所以本例中,我们开发一个英汉词典,用户执 行程序后,单击“翻译”按钮即可显示该单词的中文翻译 . 英汉词典标准版 因为这个案例的数据必须 ...
- Surprise团队第三周项目总结
Surprise团队第二周项目总结 项目进展 这周我们小组的项目在上周的基础上进行了补充,主要注重在注册登录界面的实现,以及关于数据库的一些学习. 在设计注册登录界面时,每一块的地方控件都不一样,比如 ...
随机推荐
- (待解决问题)nowrap在table和td都设置了宽度的时候仍然有效
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- codeforces 620E. New Year Tree dfs序+线段树+bitset
题目链接 给一棵树, 每个节点有颜色, 两种操作, 一种是将一个节点的子树全都染色成c, 一种是查询一个节点的子树有多少个不同的颜色, c<=60. 每个节点一个bitset维护就可以. #in ...
- poj 2356
http://poj.org/problem?id=2356 方法一: 鸽巢原理 解题思路: n个数,,依次求其s[0],s[1],s[2],s[3].....s[n] 然后对 n取模,,必然会 ...
- 海量Web日志分析 用Hadoop提取KPI统计指标
http://blog.fens.me/hadoop-mapreduce-log-kpi/ http://dongxicheng.org/search-engine/scribe-installati ...
- JAVA用JNI方法调用C代码实现HelloWorld
一.首先是java运行环境的搭建,到官网下载java jdk安装即可(注意要修改环境变量).还可以顺便安装eclipse. 二.编写java代码,文件名HelloWorld.java public c ...
- 关于String和StringBuffer的理解问题:指针、变量的声明、变量的值的变化
问题描述: 首先,看一个小的测试程序: public static void main(String[] args) { testStringBuffer test = new testStringB ...
- BZOJ 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按F ...
- [上海] 携程 门票事业部 招聘.NET 架构师 2 名 - V2EX
[上海] 携程 门票事业部 招聘.NET 架构师 2 名 - V2EX [上海] 携程 门票事业部 招聘.NET 架构师 2 名
- 如何提高banner设计含量--网上的一篇文章--感悟
"修改": 本质上是改什么?改大小?图片?文字?颜色? 老板说:修改本质上是提高“设计含量”.检测一个作品设计含量的高低,可以将作品中每一个设计元素进行分析,看它的“属性”与“操作 ...
- Unity3D游戏开发之小地图的实现
今天我们来讲一下在Unity3D中怎样实现小地图.首先,我们来一起看看终于实现的效果: 要实现小地图效果,须要实现对于小地图和角色的绘制,所以这里须要用到OnGUI()方法,我们一起来看代码: [cs ...