做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。
代码
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
class dictionary;
class Word
{
public:
Word(){}
void set(string e,string c,string w)
{
english=e;
chinese=c;
word_class=w;
}
friend class dictionary;
private:
string english;
string chinese;
string word_class;
};
class dictionary
{
public:
dictionary();
void searchword(string en);
int midsearch(int low,int high,string key);
private:
int wordNum;
Word word[8000];
};
dictionary::dictionary()
{
fstream infile;
string e,c,w;
wordNum=0;
infile.open("dictionary.txt",ios::in);
if(!infile)
{
cout<<"dictionary.txt can't open"<<endl;
exit(1);
}
while(!infile.eof())
{
infile>>e>>c>>w;
word[wordNum].set(e,c,w);
wordNum++;
}
infile.close();
}
int dictionary::midsearch(int low,int high,string key)
{
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(word[mid].english==key)
return mid;
else
if(word[mid].english>key)
high=mid-1;
else
low=mid+1;
}
return -1;
}
void dictionary::searchword(string en)
{
int key=midsearch(0,wordNum-1,en);
if(key)
cout<<word[key].english<<"-->"<<word[key].word_class<<"\t"<<word[key].word_class<<endl;
else
cout<<"查无此词!"<<endl;
}
int main( )
{
dictionary d;
string w;
cout<<"请输入要查找的单词:"<<endl;
while(cin>>w)
{
d.searchword(w);
}
return 0;
}