电子词典
做一个简单的电子词典。在文件dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word 类的一个对象可以描述一个词,
类对象数组可以存储词库。将文件中的内容读到对象数组中,由用户输入英文词,显示中文释义。
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
拓展1(选做):允许用户运行程序后,连续地查词典,直到输入”0000”结束。
拓展2(选做):试着做一个窗口版的电子词典。
拓展3(选做):使这个词典,读入一篇文章,输出其中的所有名词(或动词,或全部实词)。——
搜索引擎用类似的功能,用于筛去虚词,因为并不是所有词都值得索引。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Word
{
public:
Word();
Word(string chinese, string english, string sign);
string get_chinese(){return chinese;}
string get_english(){return english;}
string get_sign(){return sign;}
void set_chinese(string chinese){this->chinese = chinese;}
void set_english(string english){this->english = english;}
void set_sign(string sign){this->sign = sign;}
friend void input_word(Word word[]);
friend void find_word(Word word[]);
private:
string chinese;
string english;
string sign;
};
Word::Word()
{
chinese = '\0';
english = '\0';
sign = '\0';
}
Word::Word(string chinese, string english, string sign)
{
this->chinese = chinese;
this->english = english;
this->sign = sign;
}
int main()
{
Word word[8000];
input_word(word);
find_word(word);
system("pause");
return 0;
}
void input_word(Word word[])
{
string english;
string chinese;
string sign;
ifstream infile("dictionary.txt",ios::in);
if(!infile)
{
cerr << "oprn error" << endl;
exit(1);
}
for(int i = 0; i < 8000; i++ )
{
infile >> english >> chinese >> sign;
word[i].set_english(english);
word[i].set_chinese(chinese);
word[i].set_sign(sign);
}
infile.close();
}
void find_word(Word word[])
{
string ch;
int low, high, mid;
do
{
cout<<"请输入要查的词(0000结束):";
cin>>ch;
if(ch=="0000")
break;
low=0,high=8000-1;
while(low<=high)
{
mid=(low+high)/2;
if(word[mid].get_english()==ch)
{
cout<<word[mid].get_english()<<"中文意思是 : "<<word[mid].get_chinese() << " " << "词性是:" <<word[mid].get_sign()<<endl<<endl;
break;
}
else
{
if(word[mid].get_english()>ch)
high=mid-1;
else
low=mid+1;
}
if(low>high)
cout<<"查无此词"<<endl<<endl;
}
}while(1);
}