2012C++程序設計實驗報告【16.3】

/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱:         自制字典                   
* 作    者:   王琳                          
* 完成日期:  2012  年 6  月   6  日
* 版 本 號:    16.3 

* 對任務及求解方法的描述部分
* 輸入描述:
* 問題描述:做一個簡單的電子詞典。

  在文件dictionary.txt中,保存的是英漢對照的一個詞典,詞彙量近8000個,英文、中文釋義與詞性間用’\t’隔開。建一個表示詞條的類Words,Words類的一個對象可以描述一個詞,類對象數組可以存儲詞庫。將文件中的內容讀到對象數組中,由用戶輸入英文詞,顯示中文釋義。

  提示:文件中的詞彙已經排序,故在查找時,用二分查找法提高效率。

  拓展1:允許用戶運行程序後,連續地查詞典,直到輸入”0000”結束。

  拓展2:試着做一個窗口版的電子詞典。

  拓展3:使這個詞典,讀入一篇文章,輸出其中的所有名詞(或動詞,或全部實詞)。——搜索引擎用類似的功能,並不是所有詞都值得索引。

* 程序頭部的註釋結束
*/

源程序:

    
#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;
		}
	}

}


 

運行結果:

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