十六周任务三

(程序头部注释开始)
 * 程序的版权和版本声明部分
 * Copyright (c) 2011, 烟台大学计算机学院学生
 * All rights reserved.
 * 文件名称:
 * 作者:吴瑕
 * 完成日期: 2012年 06月 06日
 * 版本号:

 *对任务及求解方法的描述部分:做一个简单的电子词典。在文件dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word 类的一个对象可以描述一个词,
类对象数组可以存储词库。将文件中的内容读到对象数组中,由用户输入英文词,显示中文释义。

#include<fstream>
#include<iostream>
#include <string>
using namespace std;

 

//定义word类
class word
{
private:
	string engname;
	string chiname;
	string word_class;
public:
	void set(string e,string c,string wc);//将文件中读出的数据保存在对象数组中
    void display();//输出所查的单词
	int compare(string);//将输入的单词和数组中的单词比较,等于0表示已查到,返回。
};
//下面为类中成员函数的定义
void word::set(string e,string c,string wc)
{
	engname=e;
	chiname=c;
	word_class=wc;
}

void word:: display()
{
	cout<<engname<<"  "<<chiname<<"  "<<word_class<<endl;
}

int word::compare(string k)
{
	return engname.compare(k); 
}


//输入一词用二分法进行查询
int BinSeareh(int low, int high, word *w, string k)  
{  
    int mid;  
    while(low<=high)  
    {   
        mid=(low + high) / 2;  
        if(w[mid].compare(k)==0)  
        {  
            return mid; //查找成功返回  
        }  
        if(w[mid].compare(k)>0)  
            high=mid-1; //继续在w[low..mid-1]中查找  
        else  
            low=mid+1; //继续在w[mid+1..high]中查找  
    }  
    return -1; //当low>high时表示查找区间为空,查找失败  
}  
int main()
{
	word w[8000];
	string e,c,wc;
//将文件中的数据读入数组中
	ifstream infile("dictionary.txt",ios::in);  //以输入的方式打开文件  
	if(!infile)       //测试是否成功打开  
	{  
		cerr<<"open error!"<<endl;  
		exit(1);  
	}
	//文件成功打开时将数据读入数组中
	for(int i=0;i<8000;++i)
	{
		infile>>e>>c>>wc;
		w[i].set(e,c,wc);
	}

	string key;//输入的词
	int low=0,high=7999;

	while(key!="0000")
	{
		cout<<"请输入待查询的词(英文):"<<endl;  
		cin>>key; 

		 int j=BinSeareh(low, high, w, key);  
            if (j == -1)  
                cout<<"查无此词!"<<endl<<endl;  
            else  
                w[j].display();  
	}
cout<<"欢迎再次使用!"<<endl<<endl; 

    system("pause");  
    return 0;  
}

运行结果:

请输入待查询的词(英文):
a
查无此词!


请输入待查询的词(英文):
key
key  钥匙,关键,答案  n.
请输入待查询的词(英文):


上机感言:

int word::compare(string k)
{
return engname.compare(k); 
}

为什么要这样定义?


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值