开发者社区> 贺利坚> 正文

2014秋C++第14周项目4参考-电子词典

简介: 课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。  【项目4-电子词典】做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和
+关注继续查看
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 


【项目4-电子词典】
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
  
    提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。

参考解答:

#include <fstream>
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
string e[8000],c[8000]; //英文和中文数组,要由文件中读入
int wordsNum=0; //词库中实际的词汇条数
int BinSeareh(int low, int high, string k);

int main( )
{
 	string key;      //查询关键词
	//将文件中的数据读入到对象数组中
	ifstream infile("dictionary.txt",ios::in);  //以输入的方式打开文件
	if(!infile)       //测试是否成功打开
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	while (infile>>e[wordsNum]>>c[wordsNum])  //读取成功,则重复从文件中读
	{
		++wordsNum;
	}
	infile.close();

	//输入待查关键词并用二分查找法进行查询
	do
	{
		cout<<"请输入要查的词(0000结束):";
		cin>>key;
		if (key=="0000")
			break;
		else
		{
			int low=0,high=wordsNum-1;  //置当前查找区间上、下界的初值
			int index=BinSeareh(low, high, key);
			if (index == -1)
				cout<<"查无此词!"<<endl<<endl;
			else
				cout<<key<<"的中文意思是:"<<c[index]<<endl<<endl;
		}
	}
	while(1);
	cout<<"欢迎再次使用!"<<endl<<endl;
	return 0;
}
//二分查找,结果为所查词在数组中的下标
int BinSeareh(int low, int high, string k)
{
	int mid;
	while(low<=high)
	{
		mid=(low + high) / 2;
		if(e[mid]==k)
		{
			return mid; //查找成功返回
		}
		if(e[mid]>k)
			high=mid-1; //继续在e[low..mid-1]中查找
		else
			low=mid+1; //继续在e[mid+1..high]中查找
	}
	return -1; //当low>high时表示查找区间为空,查找失败
}






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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C++实践参考:小玩文件
【项目 - 小玩文件】 (下面是填好空的程序) (1)下面程序的功能是统计文本文件abc.txt中的字符个数,请填空将程序补充完整。 #include <iostream> #include <cstdlib> #include <fstream> // (1) using namespace std; int main() {
981 0
C++实践参考:洗牌(范型程序设计)
【项目2:洗牌】   在扑克牌游戏中,每次游戏开始都要求把54张牌重新排列一下,称为洗牌。试编写程序将一副扑克牌(用54个整数1~54表示)随机洗好后,顺序输出54张牌的情况。   参考界面: 参考解答(共4种,可作为程序阅读,品味用STL解决问题的方法,必要时,请查找相关手册)   解法1:初始化一个 vector,顺序加入所有牌,即整数1~54。然后从容器中随机
1176 0
C++实践参考:程序填空(范型程序设计)
【项目:程序填空】下面程序运行后,输出结果如下: 请填空将程序补充完整。 #include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; void Show(double); int
1066 0
C++实践参考:数组类模板
【项目-数组类模板】   在数组类的基础上,将之改造为类模板,以使数组中可以存储各种类型的数据。 template <class T> //数组类模板定义 class Array { private: T* list; //用于存放动态分配的数组内存首地址 int size; //数组大小(元素个数) ... };
1057 0
C++实践参考:两个成员的类模板
【项目-两个成员的类模板】   设有如下的类声明: class Test{ public: void SetData1(int val) { data1=val; } void SetData2(double val) {data2=val: } int GetData1() { return data1; } double GetData2()
1087 0
C++实践参考:排序函数模板
【项目-排序函数模板】   已知 void Sort(int a[],int size); void Sort(double a[],int size); 是一个函数模板的两个实例,其功能是将数组a中的前size个元素按从小到大顺序排列。试设计这个函数模板。 参考解答: #include<iostream> using namespace std;
924 0
C++实践参考——分数类中的运算符重载
【项目1-分数类中的运算符重载】   (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。 class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及
1382 0
C++实践参考——Time类中的运算符重载
【项目-Time类中的运算符重载】   实现Time类中的运算符重载。 class CTime { private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒 public: CTi
893 0
C++实践参考——数组类运算的实现
【项目-数组类运算的实现】   设计数组类Array,为了实现测试函数中要求的功能,请补足相关的函数(构造、析构函数)和运算符重载的函数。   实现策略提示:可以将测试函数中的语句加上注释,取消一句的注释,增加相应的函数,以渐增地实现所有的功能,避免全盘考虑带来的困难。 class Array { private: int* list; //用于存
995 0
C++实践参考:点-圆-圆柱类族的设计
【项目 - 点-圆-圆柱类族的设计】 按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务: (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试; (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(
1247 0
+关注
贺利坚
烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
文章
问答
文章排行榜
最热
最新
相关电子书
更多
继承与功能组合
立即下载
对象的生命期管理
立即下载
移动与复制
立即下载