//文本查询
// 要做的事情 1、把一个文本 的每一行 放入 vector 中。
// 2、记录每一个单词的行号
// 3、根据行号输出每行单词。
class TextQuery
{
public:
typedef vector<string>::size_type line_no;
void store_file( ifstream& is);
set<line_no> print_lineno(string& )const;
string print_linestring(line_no)const ;
private:
vector<string>line_of_text;
map<string , set<line_no> >word_map;
};
void TextQuery::store_file(ifstream& is)
{
string word;
while ( getline( is,word ) )
{
line_of_text.push_back(word);
}
line_no num;
for( num=0; num != line_of_text.size(); ++num )
{
string line, tempword;
istringstream istream(line_of_text[num]);
while ( istream>> word)
{
word_map[word].insert(num);
}
}
}
set<line_no> TextQuery::print_lineno(string& str)
{
map<string, set<line_no> >::iterator iter = word_map.find(str);
if (iter == word_map.end())
{
return set<line_no>();
}
return iter->second;
}
string TextQuery::print_linestring(line_no num)
{
if ( num< line_of_text.size())
{
return line_of_text[num];
}
}
void print_result(const set<TextQuery::line_no>& los, const string& str, const TextQuery & textclass)
{
cout<<"str:"<<str<<"total num:"<<los.size()<<endl;
set<TextQuery::line_no>::iterator iter=los.begin();
for (; iter != los.end();++iter)
{
cout<< *iter+1 <<textclass.print_linestring(*iter)<<endl;
}
}
void main( void )
{
}