C++第十六週【任務三】

/*
* 程序的版權和版本聲明部分
* 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;  
        }  
    }  
  


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章