C++第16周项目3 -电子词典

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/9078413【项目3】电子词典   做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文、中文释

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/9078413

【项目3】电子词典
   做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word类的一个对象可以描述一个词,将文件中的内容读到对象数组中等待查询。由用户输入英文词,显示词性和中文释义。允许连续查词,自行设计退出查词状态的方式。
   提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。

参考解答:

#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
	void display();
private:
	string english;
	string chinese;
	string word_class;
};

void Word::set(string e, string c, string wc)
{
	english=e;
	chinese=c;
	word_class=wc;
}

void Word::display()
{
	cout<<english<<'\t'<<word_class<<'\t'<<chinese<<endl<<endl;
}

int Word::compare(string k)
{
	return english.compare(k);
}

int BinSeareh(int low, int high, Word *w, string k);

int main( )
{
	Word words[8000]; //用于保存词库
	string e,c,wc;
	string key;      //查询关键词
	int wordsNum=0;  //词库中词数

	//将文件中的数据读入到对象数组中
	ifstream infile("dictionary.txt",ios::in);  //以输入的方式打开文件
	if(!infile)       //测试是否成功打开
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	while (!infile.eof())
	{
		infile>>e>>c>>wc;
		words[wordsNum].set(e, c, wc);
		++wordsNum;
	}

	//输入待查关键词并用二分查找法进行查询
	do
	{
		cout<<"请输入待查询的关键词(英文),0000结束:"<<endl;
		cin>>key;
		if (key!="0000")
		{
			int low=0,high=wordsNum-1;  //置当前查找区间上、下界的初值
			int index=BinSeareh(low, high, words, key);
			if (index == -1)
				cout<<"查无此词!"<<endl<<endl;
			else
				words[index].display();
		}
	}
	while(key!="0000");
	cout<<"欢迎再次使用!"<<endl<<endl;
	return 0;
}

int BinSeareh(int low, int high, Word *w, string k)
{
	int mid;
	while(low<=high)
	{
		mid=(low + high) / 2;
		if(w[mid].compare(k)==0)
		{
			return mid; //查找成功返回
		}
		if(w[mid].compare(k)>0)
			high=mid-1; //继续在w[low..mid-1]中查找
		else
			low=mid+1; //继续在w[mid+1..high]中查找
	}
	return -1; //当low>high时表示查找区间为空,查找失败
}

   拓展1(选做):使这个词典,读入一篇文章,输出其中的所有名词(或动词,或全部实词)。——搜索引擎用类似的功能,用于筛去虚词,因为并不是所有词都值得索引。
   拓展2(选做):试着做一个窗口版的电子词典。


  

目录
相关文章
|
2月前
|
编译器 C++ 开发者
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
83 1
|
2月前
|
算法 测试技术 数据处理
【C/C++ 面试技巧】如何在简单的项目里突出自己的价值?
【C/C++ 面试技巧】如何在简单的项目里突出自己的价值?
53 1
|
2月前
|
算法 测试技术 开发工具
编写高效技术文档的艺术:C++项目实践指南
编写高效技术文档的艺术:C++项目实践指南
80 0
|
2月前
|
开发工具 C语言 C++
CMake构建大型C/C++项目:跨平台设计与高级应用(二)
CMake构建大型C/C++项目:跨平台设计与高级应用
46 0
|
1月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
64 7
|
3天前
|
存储 C++ UED
【C++】飞机大战项目记录
通过上面的设计,我们实现来看飞机大战的主要功能
18 4
|
3天前
|
存储 安全 测试技术
【C++】string学习 — 手搓string类项目
C++ 的 string 类是 C++ 标准库中提供的一个用于处理字符串的类。它在 C++ 的历史中扮演了重要的角色,为字符串处理提供了更加方便、高效的方法。
12 0
【C++】string学习 — 手搓string类项目
|
13天前
|
C++
C++入门项目——通讯管理系统
C++入门项目——通讯管理系统
|
18天前
|
设计模式 存储 算法
C++从入门到精通:3.7阅读和理解开源项目——在实际项目中应用C++编程技巧和规范
C++从入门到精通:3.7阅读和理解开源项目——在实际项目中应用C++编程技巧和规范
|
1月前
C/C++test两步完成CMake项目静态分析
通过将C/C++test集成到CMake项目中,并根据项目的需要进行配置,可以在两步内完成CMake项目的静态分析。这样可以帮助开发人员及时发现并修复潜在的代码问题,提高代码质量和可靠性。
8 0