15-5电子词典啊。。折磨死了

/*
*程序的版权和版本声明部分:
*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;所以有好多错误。。现在看改完以后的程序输出能有字典的感觉,心情好点了。。15-5电子词典啊。。折磨死了_第1张图片

你可能感兴趣的:(15-5电子词典啊。。折磨死了)