C++ Primer(第5版) 练习 15.42
练习 15.42 从下面的几种改进中选择一种,设计并实现它:
( a ) 按句子查询并打印单词,而不再是按行打印。
( b ) 引入一个历史系统,用户可以按编号查阅之前的某个查询,并可以在其中增加内容或者将其与其他查询组合。
( c ) 允许用户对结果做出限制,比如从给定范围的行中挑出匹配的进行显示。
环境:Linux Ubuntu(云服务器)
工具:vim
代码块
实现a
TextQuery::TextQuery(ifstream &is):file(new vector<string>){char sign[] = {'\t', '\r', '\v', '\f', '\n'};char endSign[] = {'?', '.', ',', '!'};set<char> space(sign, sign + 5);set<char> endline(endSign, endSign + 3);string word_line;char ch;while(is.get(ch)){if(!space.count(ch)){word_line += ch;}if(endline.count(ch)){file->push_back(word_line);int n = file->size() - 1;istringstream is(word_line);string word;while(is>>word){auto &lines = wm[word];if(!lines){lines.reset(new set<line_no>);}lines->insert(n);}word_line.assign("");} }
}