12.3.1
来源:互联网 发布:岁月如歌歌词含义 知乎 编辑:程序博客网 时间:2024/05/21 07:50
QueryResult.h
#pragma once#include<memory>#include<set>#include<string>#include<vector>class QueryResult { using line_no = std::vector<std::string>::size_type;public: QueryResult(std::string s, std::shared_ptr<std::set<line_no>> p, std::shared_ptr<std::vector<std::string>> f) : sought(s), lines(p), file(f){} friend std::ostream &print(std::ostream& os, const QueryResult&qr);private: std::string sought; std::shared_ptr<std::set<line_no> > lines; std::shared_ptr<std::vector<std::string> > file;};
TextQuery.h
#pragma once#include<fstream>#include<string>#include<sstream>#include<vector>#include<memory>#include<map>#include<set>class QueryResult;class TextQuery{public: using line_no = std::vector<std::string>::size_type; TextQuery(std::ifstream&); QueryResult query(const std::string&) const;private: std::shared_ptr<std::vector<std::string>> file; std::map < std::string, std::shared_ptr<std::set<line_no>>> wm;};
TextQuery.cpp
#include"TextQuery.h"#include"QueryResult.h"TextQuery::TextQuery(std::ifstream& infile) :file(new std::vector<std::string>){ std::string line; while (getline(infile, line)) { file->push_back(line); int n = file->size(); std::istringstream aline(line); std::string word; while (aline >> word) { auto &lines = wm[word]; if (!lines) lines.reset(new std::set<line_no>); lines->insert(n); } }}QueryResult TextQuery::query(const std::string&sought) const { static std::shared_ptr<std::set<line_no>> nodate(new std::set<line_no>); auto loc = wm.find(sought); if (loc == wm.end()) { return QueryResult(sought, nodate, file); } else { return QueryResult(sought, loc->second, file); }}
Main
#include"TextQuery.h"#include"QueryResult.h"#include<iostream>std::ostream &print(std::ostream& os, const QueryResult&qr) { os << qr.sought << " occurs " << qr.lines->size() << (qr.lines->size() > 1 ? " times" : " time") << std::endl; for (auto num : *qr.lines) { os << "\t(line " << num << ") "<< *(qr.file->begin() + num - 1) << std::endl; } return os;}void runQueries(std::ifstream &infile) { TextQuery tq(infile); while (true) { std::cout << "enter word to look for,or q to quit: "; std::string s; if (!(std::cin >> s) || s == "q") break; print(std::cout, tq.query(s)) << std::endl; }}int main(){ runQueries(std::ifstream("TXT.txt")); return 0;}
0 0
- 12.3.1
- 12.3.1 局部索引
- 12.3(1)
- 12.3.1 Initially assigned variables
- 12.3.1 数据共享对象
- 12.3.1 用迭代器转换序列
- 12.3.1 用迭代器转换序列
- 12.3
- 12.3
- 12.3
- 12.3
- 12.3
- 12.3
- 12.3
- 12.3
- 12.3
- Altair.Flux.12.3.1.Win64 1DVD
- 精通Silverlight——12.3.1 添加键盘事件
- 小菜鸟开始自己的记录之路
- Java设计模型之:原型模式
- Linux内核-内存-分区页框分配器
- 使用EditText 代替textview实现末尾省略号
- 多服务器scp文件
- 12.3.1
- 看雪学院-解密入门教学(二)笔记
- 关于2017年2月雅思考试延长报名截止日期的通知
- 【内存泄露】Android内存泄漏---非静态内部类创建静态实例
- 浅谈命令查询职责分离(CQRS)模式
- C语言指针(2)
- php正确输出json数据
- C# 图片缩略图,图片水印,文字水印
- UML类图几种关系的总结