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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值