如题:

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++:文本查询(单词查询)的更多相关文章

  1. Python实现单词查询&文件查找

    最近学C++ Primer,做到第十二章有个习题.要求针对英文文本,对于用户想搜索的单词,打印出该单词在文本中出现的总次数,单词所出现行号及对应的行内容:单词在一行内出现多次,只打印该行一次.C++的 ...

  2. [System.Net]模拟Web请求编写简易单词查询客户端

    demo: 我就不上传了 前言 在实际生活中,网络请求的应用极其常见,比如使用浏览器,程序中我们还要调用webservice.那么浏览器是怎么请求网络资源的呢?不用它可以自己请求不? 答案是可以的. ...

  3. C# 有道API翻译 查询单词详细信息

    原文:C# 有道API翻译 查询单词详细信息 有道云官方文档 有道云翻译API简介:http://ai.youdao.com/docs/doc-trans-api.s#p01 有道云C#Demo : ...

  4. 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 分页 ...

  5. coding++:mybatis 嵌套查询子查询column传多个参数描述

    mybatis 嵌套查询子查询column传多个参数如下: 2.代码示例 备注:注意,相同颜色的单词都是有关联的 <resultMap id="blogResult" typ ...

  6. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  7. 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

    前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...

  8. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  9. HQL查询——HQL查询的基本用法

    HQL查询--HQL查询的基本用法 1.HQL语法类似于SQL语法,但是需要注意的是,HQL是一种完全面向对象的查询语言.SQL语言操作的对象是数据表.列等数据库对象,而HQL语言的操作对象是类.实例 ...

随机推荐

  1. Android工程导入Unity3D(避坑版)

    最近与各种牛逼的项目管理软件打交道,比如SourceTree,要看英文版的才看得懂,中文反而不会用!... 这篇博客适合没怎么接触过安卓的小伙伴们,网上也有很多相关的教程,但是大多都没有具体的操作或则 ...

  2. RHEL6.4 xclock安装小记

    http://blog.sina.com.cn/s/blog_623630d50101tc67.html

  3. mybatis oracle和mysql like模糊查询写法

    oracle:RESOURCE_NAME LIKE '%' || #{resourceName} || '%'mysql:RESOURCE_NAME like concat(concat(" ...

  4. Buaaclubs的NABC与发布

    NEED: 本项目主要目的是实现一个社团学生公共平台,平台的宗旨是为学生提供信息,为社团提供服务,在社团和学生之间建立联系.经过调查,我们发现了用户的以下需求: 需求一:社团发布信息,同学获知信息 这 ...

  5. spring冲刺第四天

    昨天进行了地图的初步编写,但是存在BUG. 今天上网查找了错误的原因,改进了源代码,使程序可以执行. 遇到的问题;感觉地图界面太简单,需要作出更多的场景,这就需要不断的完善.

  6. WebGL学习笔记一

    学习用来做web3D的,从第一页开始学起先做2D的,接下来的程序是一个入门级的程序,可以通过在画板上的不同位置点击而获取不同颜色的点,以画板中心为坐标原点四个象限有不同的颜色,访问地址  http:/ ...

  7. C# winForm调用WebService

    C#winForm调用WebService的远程接口 创建一个WebService工程用例 添加服务引用 添加webService服务地址 输入命名空间名称 主要代码 测试成功截图 工程代码下载 新建 ...

  8. ThoughtWorks.QRCode类库

    ThoughtWorks.QRCode一个二维码生成类库.

  9. asp.net如何隐藏表格(table)的一行

    直接用jquery $("#id1").click(function(){ $("#trId").css("display""no ...

  10. angularJS中$apply()方法详解

    这篇文章主要介绍了angularJS中$apply()方法详解,需要的朋友可以参考下   对于一个在前端属于纯新手的我来说,Javascript都还是一知半解,要想直接上手angular JS,遇到的 ...