第13周项目OOP版电子词典

编号及代码:
/*
*Copyright(c)2015,烟台大学计算机与工程学院
*All rights reserved;
*文件名称:score.cpp
*作者:范星月
*完成日期:2015年6月9日
*版本号:v1.0
*
*问题描述:
*问题输入:
*问题输出:
*/

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;

//定义词条类
class Word
{
public:
    void set(string e, string c, string wc);
    int compare(string);  //英语部分与给定字符串比较,等于返回,大于返回,小于返回-1
    string getChinese();
    string getWord_class();
private:
   string english;
    string chinese;
    string word_class;
};
 void Word::set(string e,string c,string wc)
 {
     english=e;
     chinese=c;
     word_class=wc;
 }
int Word::compare(string k)
{
    return english.compare(k);
}
 string Word::getChinese()
 {
     return chinese;
 }
 string Word::getWord_class()
 {
     return word_class;
 }
 //定义字典类
class Dictionary
{
public:
    Dictionary();
    void searchWord(string k);
private:
    int BinSeareh(int low, int high, string k);
    int wordsNum;
    Word words[8000]; //用于保存词库
};
Dictionary::Dictionary()
{
    string e,c,wc;
    wordsNum=0;
    //将文件中的数据读入到对象数组中
    ifstream infile("dictionary.txt",ios::in);
    if(!infile)
    {
        cerr<<"dictionary open error!"<<endl;
        exit(1);
    }
    while(!infile.eof())
    {
        infile>>e>>c>>wc;
        words[wordsNum].set(e,c,wc);
        ++wordsNum;
    }
    infile.close();
}
int Dictionary::BinSeareh(int low,int high,string key)
{
    int mid;
    while(high>=low)
    {
        mid=(high+low)/2;
        if(words[mid].compare(key)==0)
            return mid;
    }
    if(words[mid].compare(key)>0)
    {
        high=mid-1;
    }
    else
        low=mid+1;
    return -1;
}
void Dictionary::searchWord(string key)
{
    int low=0,high=wordsNum-1;
    int index=BinSeareh(low,high,key);
    if(index>=0)
            cout<<key<<"--->"<<words[index].getWord_class()+"\t"<<words[index].getChinese();
    else
        cout<<"查无此词";
    cout<<endl<<endl;
}
int main( )
{
    Dictionary dict;
   string key;

    do
    {
        cout<<"请输入待查询的关键词(英文),0000结束:"<<endl;
        cin>>key;
       if (key!="0000")
       {
           dict.searchWord(key);
       }
    }
    cout<<"欢迎再次使用"<<endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值