/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 十六周任务三电子词典
* 作 者:苗影
* 完成日期: 2012 年 6 月 6日
* 版 本 号:
* 对任务及求解方法的描述部分
* 输入描述: 电子词典
做一个简单的电子词典。在文件dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word 类的一个对象可以描述一个词,
类对象数组可以存储词库。将文件中的内容读到对象数组中,由用户输入英文词,显示中文释义。
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class Word
{
public:
Word(string e,string c,string t):english(e),chinese(c),type(t){}
Word();
friend void search_word(string a,Word word[]);
friend void get_word(Word word[]);
private:
string english;
string chinese;
string type;
};
Word::Word()
{
english="0";
chinese="0";
type="0";
}
void search_word(string a,Word word[])
{
int height=8000,low=0,h;
while(a!="0")
{
h=(height+low)/2;
if(a==word[h].english)
{
cout<<"中文意思:"<<word[h].chinese<<'\t'<<"词性:"<<word[h].type<<endl;break;
}
else
{
if(a<word[h].english)
height=h-1;
else
low=h+1;
}
if(low>height)
{
cout<<"查无此词!"<<endl;
break;
}
}
}
void get_word(Word word[])
{
ifstream infile("dictionary.txt",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(int i=0;i<8000;i++)
{
infile>>word[i].english>>word[i].chinese >>word[i].type ;
}
infile.close();
}
int main()
{
Word word[8000];
string a;
get_word( word);
while(1)
{
cout<<"请输入要查找的单词,按#结束"<<endl;
cin>>a;
if(a=="0")
{
cout<<"欢迎再次使用"<<endl;
break;
}
search_word( a, word);
}
system("pause");
return 0;
}
请输入要查找的单词,按#结束
e
中文意思:我们 词性:pron.
请输入要查找的单词,按#结束
re
查无此词!
请输入要查找的单词,按#结束
ue
查无此词!
请输入要查找的单词,按#结束
ou
查无此词!
请输入要查找的单词,按#结束
core
中文意思:得分,成绩,二十 词性:n.
请输入要查找的单词,按#结束
感言:在if语句的查找中如果去掉break会陷入死循环