十六周实验报告(三)

/*
【任务 3】电子词典 
做一个简单的电子词典。在文件 dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近 8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类 Word,Word 类的一个对象可以描述一个词,
类对象数组可以存储词库。将文件中的内容读到对象数组中,由用户输入英文词,显示中文释义。 
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。 
拓展 1(选做):允许用户运行程序后,连续地查词典,直到输入”0000”结束。 
*/
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:   dictionary.cpp                           
* 作    者:   苗向前     
* 完成日期:    2012  年   6    月   10   日
* 版 本 号:       V 3.0 
* 程序头部的注释结束
*/
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

class Word
{
public:
	string word;
	string chinese;
	string lexical;
};

void read_words(int num, Word words[]);
void show_word(int index, Word words[]);
void find_word(string key, int num, Word words[]);

int main( )
{
	Word words[7962];
	int num = 7962;
	string key;

	read_words(num, words);//读入文件中的数据

	//	for (int i = 0; i < num; i++)
	//		show_word(i, words);
	while (true)
	{
		cout << "请输入要查的单词" << endl;
		cin >> key;
		if (key == "0000")
			break;
		find_word(key, num, words);
	}

	system("PAUSE");
	return 0;
}
//定义从文件读入数据函数
void read_words(int num, Word words[])
{
	ifstream infile("dictionary.txt", ios::in);
	if(!infile)
	{
		cerr << "dictionary.txt open error!" << endl;
		system("PAUSE");
		exit(1);
	}
	for(int i = 0; i < num; i++)
	{
		infile >> words[i].word >> words[i].chinese >> words[i].lexical;
	}
	infile.close();
}
void show_word(int index, Word words[])
{
	cout << words[index].word << '\t' << words[index].chinese << '\t' << words[index].lexical << endl;
}


void find_word(string key, int num, Word words[])
{
	int min = 0, max = num, mid;
	while (true)
	{
		mid = (min+max) / 2;
		if(words[mid].word == key)
		{
			show_word(mid, words);
			break;
		}
		else
		{
			if(key < words[mid].word)
			{
				max = mid - 1;
			}
			else
			{
				min = mid + 1;
			}
		}
		if(min == max + 1)
		{
			cout << "查无此词!" << endl;
			break;
		}
	}

}
/*
请输入要查的单词
jkghk
查无此词!
请输入要查的单词
key
key     钥匙,关键,答案        n.
请输入要查的单词
0000
请按任意键继续. . .


*/


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值