第十六周实验报告3

来源:互联网 发布:notepad pro mac 编辑:程序博客网 时间:2024/05/18 20:09

/

* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名称:电子词典* 作 者刘程程                              * 完成日期:2012 年 06 月 06     日* 版 本 号: V1.0 * 对任务及求解方法的描述部分* 输入描述:。将文件中的内容读到对象数组中,由用户输入英文词。* 问题描述: 做一个简单的电子词典。在文件dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近8000 个,英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word 类的一个对象可以描述一个词,类对象数组可以存储词库。* 程序输出:显示中文释义。 * 程序头部的注释结束#include <fstream>#include <iostream>#include <string>using namespace std;//定义学生类class Word{public: void set(string e,string c,string wc); int compare(string);//英语部分与给定字符串比较,等于返回,大于返回,小于返回-1; void display();private: string english; string chinese; string word_class;};void Word::set(string e,string c,string wc){    english=e; chinese=c; word_class=wc;}void Word::display(){ cout<<english<<'\t'<<word_class<<'\t'<<chinese<<endl<<endl;}int Word::compare(string k){    return english.compare(k);}int BinSeareh(int low,int high,Word*w,string k);int main(){ Word words[8000];//用于保存词库 string e,c,wc; string key;//查询关键词 int wordsNum=0;//词库中词数 //将文件中的数据读入到对象数组中 ifstream infile("dictionary.txt",ios::in);//以输入的方式打开文件 if(!infile) {  cerr<<"open error!"<<endl;  exit(1); } while(!infile.eof()) {  infile>>e>>c>>wc;  words[wordsNum].set(e,c,wc);  ++wordsNum; } //输入待查关键字并用二分法查找 do {  cout<<"请输入待查询的关键字(英文):"<<endl;  cin>>key;  if(key!="0000")  {   int low=0,high=wordsNum-1;//置当前查找区间上、下届的初值   int index=BinSeareh(low,high,words,key);   if(index==-1)    cout<<"查无此词"<<endl<<endl;   else    words[index].display();  } } while(key!="0000"); cout<<"欢迎再次使用!"<<endl<<endl; system("pause"); return 0;}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时表示查找区间为空,查找失败}