1 该程序将读取用户指定的任意文本文件,然后允许用户从该文件中查找单词。查询的结果是该单词出现的次数,并列出每次出现所在的行。如果某单词在同一行中多次出现,程序将只显示该行一次,行号按升序显示。
  2
  3 以下是代码实现:
  4
  5 #include <ctype.h>
  6 #include <iostream>
  7 #include <string>
  8 #include <map>
  9 #include <set>
 10 #include <vector>
 11 #include <sstream>
 12 #include <fstream>
 13 #include <algorithm>
 14 #include <iterator>
 15 using std::cout;
 16 using std::endl;
 17 using std::map;
 18 using std::set;
 19 using std::vector;
 20 using std::string;
 21 using std::ifstream;
 22 using std::ofstream;
 23 using std::istringstream;
 24
 25 class Query
 26 {
 27     public:
 28         void readFile(const string filename);
 29         void query(const string & world);
 30
 31     private:
 32         vector<string> _lines;
 33         map<string,set<int>> word2line;
 34         map<string,int> _wordFreq;
 35 };
 36
 37 void Query::readFile(const string filename)
 38 {
 39     ifstream ifs(filename);
 40     if(!ifs.good())
 41     {
 42         cout << "Oops!" << endl;
 43         return;
 44     }
 45     string line;
 46     int setnumber = 0;
 47     while(getline(ifs,line))
 48     {
 49         _lines.push_back(line);
 50         ++setnumber;
 51         istringstream iss(line);
 52         string word;
 53         while(iss >> word)
 54         {
 55             map<string,int>::iterator it = _wordFreq.begin();
 56             while(it != _wordFreq.end())
 57             {
 58                 if(word==it->first)
 59                 {
 60                     ++(it->second);
 61                     word2line[word].insert(setnumber);
 62                     break;
 63                 }
 64                 ++it;
 65             }
 66             if(it == _wordFreq.end())
 67             {
 68                 _wordFreq[word]=1;
 69                 word2line[word].insert(setnumber);
 70             }
 71         }
 72     }
 73     ifs.close();
 74 }
 75
 76 void Query::query(const string & word)
 77 {
 78     if(!_wordFreq[word])
 79     {
 80         cout << "word:" << word << " --> Not found!" << endl;
 81     }
 82     else
 83     {
 84         cout << word << " occurs " << _wordFreq[word] << " times." << endl;
 85         for(auto & elem : word2line[word])
 86         {
 87             cout << "   (line " << elem << ") " << _lines[elem-1] << endl;
 88         }
 89     }
 90 }
 91
 92 int main(int argc,char *argv[])
 93 {
 94     if(argc!=3)
 95     {
 96         cout << "Oops!" << endl;
 97         return -1;
 98     }
 99     Query qur;
100     qur.readFile(argv[1]);
101     qur.query(argv[2]);
102
103     return 0;
104 }

转载于:https://www.cnblogs.com/m4ch0/p/7072005.html

C++实现简单的文本查询相关推荐

  1. C++ 容器的综合应用的一个简单实例——文本查询程序

    [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例. 通过实现一个简单的文本查询程序,希望能够对C++的容器学习有更深的理解. 由 ...

  2. C++ primer 第12章 12.3 使用标准库:文本查询程序

    文章目录 使用标准库:文本查询程序 文本查询程序设计 数据结构 在类之间共享数据 自己的文本查询程序 书中的文本查询程序 使用标准库:文本查询程序 我们将实现一个简单的文本查询程序,作为标准库相关内容 ...

  3. C++之文本查询系统

    1. 整体需求 使用标准库实现一个简单的文本查询系统.允许用户在一个给定的文件中查询单词.查询结果是单词在文件中出现的次数以及所在行的列表.如果一个单词在一行中出现多次,该行也只列出一次,但是出现的次 ...

  4. android简单星座查询,简单的星座查询

    简单的星座查询 1.引言 对于一个简单的星座查询的过程是为了熟悉时间控件Dateoicker的使用,并与java中初始化日历的Callendar类相结合来完成简单的星座的查询功能.2.程序代码 对于实 ...

  5. c++ primer--容器的综合应用:文本查询程序

    c++ primer–容器的综合应用:文本查询程序 我们的程序将读取用户指定的任意文本文件,然后允许用户从该文件中查找单词.查询的结果是该单词出现的次数,并列出每次出现所在的行.如果某单词在同一行中多 ...

  6. 输入手机号查询信息C语言,简单个人电话号码查询系统.doc

    课程设计任务书 2011-2012学年第1学期 电子与信息工程系 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 简单个人电话号码查询系统 完成期限:自2012 年 1月2日至2012 年 ...

  7. Antlr4之简单的sql查询解析demo

    当前版本:jdk1.8.antlr4.8 1. 声明 当前内容主要为测试和使用Antlr4,并设计简单的SQL查询解析(本人解析IoTDB源码中发现其中使用了Antlr4来实现对sql执行的解析) 1 ...

  8. 使用Flutter编写一个简单的天气查询App

    使用Flutter编写一个简单的天气查询App Flutter项目目录分析 入口函数 home:主页面 编写天气应用 网络请求 数据解析 布局编写 Flutter里基础的Widget 上 中 下 Fl ...

  9. 用python做一个数据查询软件_Python实现功能简单的数据查询及可视化系统

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. image.png 前言 数据时代,数据的多源集成 ...

最新文章

  1. 第十七届全国大学生智能汽车竞赛,我们来了
  2. UVa 11520 Fill the Square 填充正方形
  3. javascript中的this
  4. Java SE 6 新特性: Java DB 和 JDBC 4.0
  5. web 应用在线编辑器 glitch 简介
  6. gitee如何搭建mysql_Windows基于gitee使用hexo搭建个人博客笔记
  7. 移除apt源_apt提示处理归档 (--unpack)时出错的解决办法
  8. Nginx日志配置详解
  9. mysql alter event_MYSQL ALTER EVENT介绍
  10. html图标反色,Html5 反色 及其 透明 效果
  11. php is_subclass_of,PHP is_subclass_of函数的一个BUG和解决方法
  12. 解决OverflowError: int too large to convert to float的办法
  13. 最新一键修改手机MAC地址和路由器wifi物理地址
  14. 碳排放权交易管理办法即将施行,你知道火电厂的碳排放是怎么算出来的吗?
  15. 黑苹果10.15.7安装comfast永存,CF-811AC驱动方法
  16. 通过优启通制作U盘启动安装Windows系统
  17. 快速迭代内部学习心得
  18. 【opencv-python】寻找矩形框
  19. mssql2000 mysql,MYSQL 与MSSQL2000 在修改表字段的区别
  20. 第十篇:SpringBoot集成支付宝接口扫码支付

热门文章

  1. totoisegit不显示对勾_暗黑2画质不满意?教你简单安装高分辨率补丁
  2. 烟台大学计算机技术面试,2019烟台大学研究生复试面试注意哪些
  3. java获取动态天气api,java调用中国天气网api获得天气预报信息
  4. python模拟app抢票_亲测,手把手教你用Python抢票
  5. java打印堆栈信息linux,在C/C++程序里打印调用栈信息(转载)
  6. python睡眠_Python时间睡眠()
  7. kotlin_Kotlin阵列
  8. SQL Drop数据库– MySQL,PostgreSQL,SQL Server
  9. CentOS下通过yum安装svn及配置
  10. docker 安装portainer、gogs、redis、mongodb、es、rabbitmq、mysql、jenkins、harbor