/*
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱:C++第十六週【任務三】
* 作 者: 李洪懸
* 完成日期: 2012 年 6 月 4 日
* 對任務及求解方法的描述部分
* 輸入描述:
* 問題描述:程序解析
* 程序輸出:
*/
【任務3】電子詞典
做一個簡單的電子詞典。在文件dictionary.txt 中,保存的是英漢對照的一個詞典,詞彙量近8000 個,英文、中文釋義與詞性間用’\t’隔開。建一個表示詞條的類Word,Word 類的一個對象可以描述一個詞,類對象數組可以存儲詞庫。將文件中的內容讀到對象數組中,由用戶輸入英文詞,顯示中文釋義。
提示:文件中的詞彙已經排序,故在查找時,用二分查找法提高效率。
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
class Word
{
public:
string word;
string chinese;
string lexical;
};
void Read_word(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_word(int num, Word words[])
{
ifstream infile("dictionary.txt", ios::in);
if(!infile)
{
cerr << "dictionary.txt open error!" << endl;
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;
}
}