C/C++:文本查询(单词查询)
如题:
C/C++:
Textqurey.h(方便看都在.h里实现了):
//
// Created by 徐爱东 on 17/7/10.
// #ifndef TEXTQUERY_TEXTQUERY_H
#define TEXTQUERY_TEXTQUERY_H #include <iostream>
#include <memory>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <sstream>
#include <fstream> class Textquery
{
private:
using vsizetype=std::vector<std::string>::size_type;
std::shared_ptr<std::vector<std::string> > File;
std::map<std::string, std::shared_ptr<std::set<vsizetype> > > wm; public:
class QueryResult
{
friend class Textquery; private:
std::string Queryword;
std::shared_ptr<std::vector<std::string> > file_;
std::shared_ptr<std::set<vsizetype> > lines_;
public:
QueryResult(std::string Queryword, std::shared_ptr<std::vector<std::string> > file,
std::shared_ptr<std::set<vsizetype> > lines)
: Queryword(Queryword),
file_(file),
lines_(lines)
{ }
}; Textquery(std::fstream &infile)
: File(new std::vector<std::string>)
{
//文本存入vector并计算单词行数入set
std::string Textline;
std::stringstream stream;
while (std::getline(infile, Textline))
{
stream.clear(); //标志位清理
File->push_back(Textline);
stream << Textline;
vsizetype linenumber = File->size() - ; //行号; while (stream >> Textline) //单词根据空格分隔
{
auto &lines = wm[Textline]; //map[]方式没有则创建,有则返回value_type;
if (!lines) //指针为空,则创建
lines.reset(new std::set<vsizetype>);
lines->insert(linenumber);
}
}
} QueryResult query(const std::string &str)
{
auto loca=wm.find(str); if ( loca!= wm.end())
{
return QueryResult(str, File, wm[str]);
} else
{
std::shared_ptr<std::set<vsizetype>> shared_null(new std::set<vsizetype >); //没找到则返回空指针,防止崩溃
return QueryResult(str, File, shared_null);
}
} std::ostream &display(std::ostream &out, QueryResult result)
{
if (!result.lines_)
{
return out << result.Queryword << " appear 0 time\n"; } else
{
out << result.Queryword << " appear " << result.lines_->size()
<< (result.lines_->size() > ? " times" : " time") << "\n"; for (auto &iter:*result.lines_)
{
out << "\t\t\t\t\t(line" << iter + << "): " << *(result.file_->begin() + iter) << std::endl;
} //不能- -for_each, lamda语法报错?
// std::for_each(result.lines_->begin(), result.lines_->end(), [&](vsizetype &linenumber)
// {
// out<<"\t(line"<<linenumber+1<<"): "<<*(result.file_->begin()+linenumber)<<std::endl;
// }); return out;
}
}
}; #endif //TEXTQUERY_TEXTQUERY_H
main.cpp:
#include <iostream>
#include "Textquery.h" int main()
{
std::fstream file("./Tex.txt", std::ios::in);
std::stringstream stream; Textquery query(file);
std::string word;
do
{
std::cout << "Please input search word or q to quit: ";
std::cin >> word; if (word == "q")break; query.query(word);
query.display(std::cout, query.query(word)); } while ();
std::cout<<"end"<<std::endl;
return ;
}
运行结果:

C/C++:文本查询(单词查询)的更多相关文章
- Python实现单词查询&文件查找
最近学C++ Primer,做到第十二章有个习题.要求针对英文文本,对于用户想搜索的单词,打印出该单词在文本中出现的总次数,单词所出现行号及对应的行内容:单词在一行内出现多次,只打印该行一次.C++的 ...
- [System.Net]模拟Web请求编写简易单词查询客户端
demo: 我就不上传了 前言 在实际生活中,网络请求的应用极其常见,比如使用浏览器,程序中我们还要调用webservice.那么浏览器是怎么请求网络资源的呢?不用它可以自己请求不? 答案是可以的. ...
- C# 有道API翻译 查询单词详细信息
原文:C# 有道API翻译 查询单词详细信息 有道云官方文档 有道云翻译API简介:http://ai.youdao.com/docs/doc-trans-api.s#p01 有道云C#Demo : ...
- ES 20 - 查询Elasticsearch中的数据 (基于DSL查询, 包括查询校验match + bool + term)
目录 1 什么是DSL 2 DSL校验 - 定位不合法的查询语句 3 match query的使用 3.1 简单功能示例 3.1.1 查询所有文档 3.1.2 查询满足一定条件的文档 3.1.3 分页 ...
- coding++:mybatis 嵌套查询子查询column传多个参数描述
mybatis 嵌套查询子查询column传多个参数如下: 2.代码示例 备注:注意,相同颜色的单词都是有关联的 <resultMap id="blogResult" typ ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...
- HQL查询——HQL查询的基本用法
HQL查询--HQL查询的基本用法 1.HQL语法类似于SQL语法,但是需要注意的是,HQL是一种完全面向对象的查询语言.SQL语言操作的对象是数据表.列等数据库对象,而HQL语言的操作对象是类.实例 ...
随机推荐
- Python函数式编程中map()、reduce()和filter()函数的用法
Python中map().reduce()和filter()三个函数均是应用于序列的内置函数,分别对序列进行遍历.递归计算以及过滤操作.这三个内置函数在实际使用过程中常常和“行内函数”lambda函数 ...
- web.xml配置文件中<async-supported>true</async-supported>报错
web.xml配置文件中<async-supported>true</async-supported>报错 http://blog.csdn.net/dream_ll/arti ...
- 20135332 第一次JAVA实验报告
课程:Java程序设计 班级: 1353 姓名:武西垚 学号:20135332 成绩: 指导教师:娄嘉鹏 实验日期:2 ...
- web01-helloworld
新建一个Java web项目,名字为web01 在项目中新建一个servlet,名字为SimpleHello 修改doGet()方法,为: public void doGet(HttpServletR ...
- 2018软工实践—Beta冲刺(1)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 调试服务器性能 展示GitHub当日代码/文档签入记录(组内 ...
- Android笔记-1
1.点击按钮出现小窗口(响应事件) 配置方式: Activity_main.xml文件中:<Button (输入)android: onClick=”test1” /> MainActiv ...
- ASP.NET MVC 1.0 参考源码索引
http://www.projky.com/asp.netmvc/1.0/System/Web/Mvc/AcceptVerbsAttribute.cs.htmlhttp://www.projky.co ...
- Beta阶段——第三篇 Scrum 冲刺博客
i. 提供当天站立式会议照片一张: ii. 每个人的工作 (有work item 的ID) (1) 昨天已完成的工作: 账单与舍费余额数据库关联,删除功能 (2) 今天计划完成的工作: 账单排序显示 ...
- Teamcity部署.net服务“无法连接到远程服务器”解决方式
在公司Teamcity上执行自动部署.net服务的时候,发现Teamcity在启动default.aspx的时候报错了,提示:使用“0”个参数调用“GetResponse”时发生异常:“无法连接到远程 ...
- 关于css伪类
p:nth-child(2){} !选择所有p元素的第二个子元素: p:nth-of-type(2) !选择所有p元素第二个为p的子元素(是选择第二个类型为p的元素 而不是第二个子集为p的元素)