使用标准库:文本查询程序
我们将实现一个简单的文本查询程序,作为标准库相关内容学习的总结。
我们的程序允许用户在一个给定文件中查询单词。查询结果是单词在文件中出现的次数及其所在行的列表。如果一个单词在一行中出现多次,此行只列出一次。行会按照升序输出。
文本查询程序设计
数据结构
我们定义一个保存输入文件的类,将这个类命名为TextQuery,它包含一个vector和一个map。vector用来保存输入文件的文本,map用来关联每个单词和它出现的行号的set。这个类将会有一个用来读取给定输入文件的构造函数和一个执行查询的操作。
在类之间共享数据
自己的文本查询程序
TextQuery类
#ifndef __TEXTQUERY__
#define __TEXTQUERY__
#include<string>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<memory>
#include<fstream>
#include<sstream>
#include"QueryResult.h"
using namespace std;
class TextQuery {
public:
TextQuery() {
}
TextQuery(ifstream &ifs);
QueryResult query(string & s);
private:
shared_ptr<vector<string>>strText;
shared_ptr<map<string,set<int>>>strNum;
};
TextQuery::TextQuery(ifstream &ifs) {
string str;
vector<string>vec;
while (getline(ifs, str)) {
vec.push_back(str);
}
strText = make_shared<vector<string>>(vec);
map<string, set<int>>mp;
int LineNum = 1;
for (auto a : *strText) {
istringstream vecStr(a);
string tmp;
while (vecStr >> tmp) {
mp[tmp].insert(LineNum);
}
LineNum++;
}
strNum = make_shared<map<string, set<int>>>(mp);
cout << "success1"<<endl;
}
QueryResult TextQuery::query(string & s) {
if