项目要求:
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束。提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
问题及代码:
#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
using namespace std;
const int num=8000;
string English[num];
string Chinese[num];
int Trans(string word,int low,int high);
int main()
{
string word;
ifstream infile("dictionary.txt",ios::in);
if(!infile) //测试文件打开操作是否成功
{
cerr<<"open error!"<<endl;
exit(1); //打开不成功,则提示后退出。
}
for (int i=0; i<num; i++)
{
infile>>English[i];
infile>>Chinese[i];
}
infile.close();
cout<<"============欢迎使用本词典!============"<<endl;
cout<<"========================================"<<endl;
do
{
cout<<"请输入要查询的单词(输入0000可退出本程序):"<<endl;
cin>>word;
if (word=="0000")
break;
else
{
int n=Trans(word,0,num-1);
if (n==0)
cout<<"本词典未收录"<<word<<"含义。"<<endl;
else
cout<<English[n]<<'\t'<<Chinese[n]<<endl<<endl;
}
}
while(word!="0000");
return 0;
}
int Trans(string word,int low,int high)
{
int mid;
while(low<=high)
{
mid=(high+low)/2;
if (English[mid]==word)
{
return mid;
}
if (English[mid]<word)
low=mid+1; //mid往右移动
else
high=mid-1; //mid往左移动
}
return 0;
}
dictionary.txt截图:
运行结果: