如题:

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. iOS 静态库生成(引用第三方SDK、开源库、资源包)

    一.静态库创建 打开Xcode, 选择File ----> New ---> Project  选择iOS ----> Framework & Library ---> ...

  2. JS中判断对象是不是数组的方法

    JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Arra ...

  3. PyCharm配置SFTP远程调试Django应用

    http://www.ithao123.cn/content-41747.html http://www.th7.cn/system/lin/201703/205998.shtml

  4. (第十一周)Beta—review阶段成员贡献分

    项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 个人贡献分=基础分+表现分 基础分=5*5*0.5/5=2.5 成员得分如下: 成员 基础分 表现分 个人贡献 ...

  5. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-中坚阶段

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-中坚阶段 如今的编写,进入了一段时间的中坚阶段,小伙伴的思路虽然很一致,但是总是存在着一定问题,这就造成了我们中坚阶 ...

  6. 20162319 实验二 Java面对对象程序设计 实验报告

    实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...

  7. Leetcode题库——3.无重复字符的最长子串

    @author: ZZQ @software: PyCharm @file: lengthOfLongestSubstring.py @time: 2018/9/18 20:35 要求:给定一个字符串 ...

  8. sitemesh入门

    今天在公司用到了sitemesh这个框架. 网上的资料已经有很多了.  在此就不做具体介绍了, 仅仅做个笔记. sitemesh是一种模板框架,是为了解决页面重复代码而设计的. 设计思想 siteme ...

  9. AWS上的实例无法ping通的解决方案

    首先Ping只是向服务器发送ICMP的数据包,如果在服务器的防火墙没有允许ICMP协议的数据包的话,那么即使服务器正常运行,那也是ping不同的. 对于亚马逊云服务器,首先我们要确保实例绑定的安全组允 ...

  10. Mongodb 分片操作实战

    由于生产环境中一般使用zoomkeeper做config节点的仲裁节点,zoomkeeper会在三个config节点中挑选出一台作为主config节点.且mongos节点一般是两个节点,必须做高可用, ...