dictionary.out(dictionary.chsearch(english)); 这一行真好玩。<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" /><img alt="吐舌头" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif" />
//做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。
//(1)编程序,由用户输入英文词,显示词性和中文释义。
//提示1:如果要用OOP完成这个词典(当然也可以用OO方法实现),可以定义一个Word类表示一个词条,其中的数据成员string english; 表示英文单词,string chinese;表示对应中文意思,string word_class;表示该词的词性;
//还可以定义一个Dictionary类,用来表示词典,其中Word words[8000]成员表示词典中的词条,int wordsNum;表示词典中的词条数,在构造函数中从文件读入词条,而专门增加一个成员函数用于查单词。
//提示2:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
//提示3:这样的项目,最好用多文件的形式组织
#include <iostream>
#include <Cstring>
#include <cstdlib>
#include <fstream>
using namespace std;
class Word
{
public:
void get(string e,string c,string w)
{
English=e;
Chinese=c;
Word_class=w;
}
string putE()
{
return English;
}
string putC()
{
return Chinese;
}
string putW()
{
return Word_class;
}
private:
string English;
string Chinese;
string Word_class;
};
class Dictionary
{
private:
Word word[8000];
int wordNum;
public:
Dictionary();
int chsearch(string english);
void out(int );
};
Dictionary::Dictionary()
{
wordNum=0;
string e;string c;string w;
ifstream infile("dictionary.txt",ios::in);
if(!infile)
{
cerr<<"open error"<<endl;
exit(1);
}
while(!infile.eof())
{
infile>>e>>c>>w;
word[wordNum].get(e,c,w);
wordNum++;
}
}
int Dictionary::chsearch(string english)
{
int low=0;
int high=wordNum;
int mid=wordNum/2;
while(high>low)
{
if(word[mid].putE()<english)
{
low=mid;
mid=(low+high)/2;
}
else
if(word[mid].putE()==english)
{
return mid;
break;
}
else
{
high=mid;
mid=(low+high)/2;
}
}
return -1;
}
void Dictionary::out(int number)
{
if(number==-1)
{
cout<<"对不起,未查询到您输入的单词"<<endl;
}
else
{
cout<<"您查询的单词的汉语意思是:"<<word[number].putC()<<" 词性为:"<<word[number].putW()<<endl;
}
}
int main()
{
Dictionary dictionary;
string english;
cout<<"请输入您要查询的单词,输入0结束"<<endl;
while(cin>>english)
{
dictionary.out(dictionary.chsearch(english));
cout<<"请输入您要查询的单词"<<endl;
}
cout<<"谢谢使用,再见"<<endl;
return 0;
}