/*
【任务 3】电子词典
做一个简单的电子词典。在文件 dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近
8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类 Word,Word 类的一个对象可以描述一
个词,
类对象数组可以存储词库。将文件中的内容读到对象数组中,由用户输入英文词,显示中文释义。
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
允许用户运行程序后,连续地查词典,直到输入”0000”结束。
*/
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: dictionary.cpp * 作 者: 计114-4 冯珍珍 * 完成日期: 2012 年 6 月 5 日 * 版 本 号: * 程序头部的注释结束 */ #include <fstream> #include <iostream> #include <string> using namespace std; class Word { public: string word; string chinese; string paraphrase; }; 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[8000]; int num = 8000; string key; read_words(num, 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].paraphrase; } infile.close(); } void show_word(int index, Word words[]) { cout << words[index].word << '\t' << words[index].chinese << '\t' << words [index].paraphrase << 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; } } }