(程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作者:吴瑕
* 完成日期: 2012年 06月 06日
* 版本号:
运行结果:
* 程序的版权和版本声明部分
* 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);
}
为什么要这样定义?