#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
class QueryResult;
//TextQuery的主要功能是建立一个包含每行文字的file,并且统计出每个单词与其对应出现的行号
class TextQuery {
public:
TextQuery(ifstream&);
QueryResult query(const string&) const;
private:
shared_ptr<vector<string>> file;
map<string, shared_ptr<set<unsigned>>> wm;
};
TextQuery::TextQuery(ifstream& is) :file(new vector<string>)
{
string text;
while (getline(is, text))
{
file->push_back(text);
unsigned n = file->size() - 1;
istringstream line(text);
string word;
while (line >> word)
{
auto& lines = wm[word];
if (!lines)
lines.reset(new set<unsigned>);
lines->insert(n);
}
}
}
//定义一个返回的结果形式
class QueryResult {
friend ostream& print(ostream&, const QueryResult&);
public:
QueryResult(string s, shared_ptr<set<unsigned>> p, shared_ptr<vector<string>> f) :
sought(s), lines(p), file(f) {}
set<unsigned>::iterator begin() { return (*lines).begin(); }
set<unsigned>::iterator end() { return (*lines).end(); }
shared_ptr<vector<string>> get_file() { return file; }
private:
string sough
C++ primer 第五版 15.9文本查询程序再探完整程序
最新推荐文章于 2024-05-15 05:40:28 发布