/*
*程序的版权和版本声明部分:
*Copyright(c)2013,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:刘晓晓
*完成日期:2013年 12月6号
*版本号:v1.0
*对任务及求解方法的描述部分:
*输入描述: 无
*问题描述:制作一个英汉电子词典
*程序输出:无
*问题分析:
*算法设计:
*/
#include <fstream>
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
string e[8000],c[8000];
int wordsNum=0;
int search(int low,int high,string key);
int main()
{
string key;
//将文件中的数据读入到对象数组中
ifstream infile("dictionary.txt",ios::in); //以输入的方式打开文件
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
while (infile>>e[wordsNum]>>c[wordsNum]) //读取成功,则重复从文件中读
{
++wordsNum;
}
infile.close();//关闭文件
do
{
cout<<"请输入要查的词(0000结束):";
cin>>key;
if (key=="0000")
break;
else
{
int low=0,high=wordsNum-1; //置当前查找区间上、下界的初值
int r=search(low, high, key);
if (r==-1)
cout<<"查无此词!"<<endl<<endl;
else
cout<<key<<"的中文意思是:"<<c[r]<<endl<<endl;
}
} while(1);
cout<<"欢迎再次使用!"<<endl<<endl;
return 0;
}
int search(int low,int high,string k)
{
int mid;
while (low<=high)
{
mid=(low+high)/2;//二分法简单求法,返回去找的课本。
if(e[mid]==k)
{
return mid;
}
if (e[mid]>k)
high=mid-1;
else
low=mid+1;
}
return 0;
}
心得:这个词典从星期四晚上就做,一直到星期天才成功。我觉得我的思路是对的,写的过程中遇见很多困难。我果断的问了度娘。但写出来每次还是查询无此单词,明明有的也说没有。。很是恼怒!!!!!!!看了老师答案以后,经对比后了解到:r和high的初值都错了。而且在程序最后返回的时候只写了个return;所以有好多错误。。现在看改完以后的程序输出能有字典的感觉,心情好点了。。