问题及代码:
/*
Copyright (c) 2014,烟台大学计算机学院
*All rights reserved.
*文件名称:lily.cpp
*作者:李莉
*完成日期:2015年6月3日
*版本号:v1.0
*问题描述)使用这个词典,读入一篇文章,输出对其中的所词的解释。例如,对aboutcpp.txt,输出如下左图结果所示(也可以看到其中待改进的地方)。
程序输入:输入若干正数
程序输出:运行结果
*/
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
class Word
{
public:
void set(string e,string c,string wc);
int compare(string);
string getChinese();
string getWordClass();
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::getWordClass()
{
return word_class;
}
class Dictionary
{
public:
Dictionary();
string searchWord(string k);
private:
int Binsearch(int low,int high,string k);
int wordnum;
Word words [8000];
};
Dictionary::Dictionary()
{
int wordnum=0;
string e,c,wc;
ifstream infile("dictionary.txt",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
while(!infile.eof())
{
infile>>e>>c>>wc;
words[wordnum].set(e,c,wc);
wordnum++;
}
infile.close();
}
int Dictionary::Binsearch(int low,int high,string k)
{
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(words[mid].compare(k)==0)
{
return mid;
}
if(words[mid].compare(k)>0)
{
high=mid-1;
}
else
{
low=mid+1;
}
}
return -1;
}
string Dictionary::searchWord(string k)
{
int low=0,high=wordnum-1;
int index=Binsearch(low,high,k);
if(index>=0)
return words[index].getWordClass()+words[index].getChinese();
else
return "查无此词!";
}
int main()
{
Dictionary dict;
ifstream infile("aboutcpp.txt",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
string word;
while(infile>>word)
{
cout<<word<<"---------------"<<dict.searchWord(word)<<endl;
}
infile.close();
return 0;
}
运行结果:
心得体会:
无论怎么改都是如图的运行结果。。。求助攻!