文本查询
该程序将读取用户指定的任意文本文件,然后允许用户从该文件中查找单词。查询的结果是该单词出现的次数,并列出每次出现所在的行,如果某单词在同一行中多次出现,程序将只显示该行一次。行号按升序显示。

要求:
    a. 它必须允许用户指明要处理的文件名字。
     
    b. 程序将存储该文件的内容,以便输出每个单词所在的原始行。
         vector<string> lines;//O(1)  完美hash
      或 map<int, string> lines;//O(logN)
      或 unorderedmap<int,string> lines;//O(1) 
         
    c. 它必须将每一行分解为各个单词,并记录每个单词所在的所有行。 在输出行号时,应保证以升序输出,并且不重复。 
             
      map<string, set<int> > word2Line;
      map<string, int> dict;
     
    d. 对特定单词的查询将返回出现该单词的所有行的行号。

e. 输出某单词所在的行文本时,程序必须能根据给定的行号从输入 文件中获取相应的行。

 ////// @file    textQuery.cc/// @author  guoleida(496919313@qq.com)/// @date    2017-08-02 17:30:56///
#include <vector>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <sstream>
#include <fstream>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::ifstream;
using std::vector;
using std::map;
using std::set;
using std::istringstream;class TextQuery
{
public:void readFile(const string &filename);void query(const string & word);
private:vector<string> _lines;map<string,set<int> > _word2Line;map<string,int> _wordFreq;
};void TextQuery::readFile(const string &filename)
{ifstream ifs(filename.c_str());if(!ifs.good()){cout <<"ifstream open file error" <<endl;return;}string line;int i=0;string word;while(getline(ifs,line))//一次读取一行{_lines.push_back(line);//将一行放入容器中istringstream iss(line);//获取一行i++;//行号加一while(iss >> word)//每次拿到一个单词{_wordFreq[word]++;//频次加一_word2Line[word].insert(i);//加入词出现的行号}}
}void TextQuery::query(const string & word)
{cout<< word <<"共出现了"  << _wordFreq.find(word)->second << "次" <<endl;set<int>::const_iterator itset;vector<string>::const_iterator itvector;int i;//用来匹配行号for( itset = (_word2Line.find(word)->second).begin();itset != (_word2Line.find(word)->second).end(); ++itset){cout<<"     (line "<<*itset <<")  ";i=0;for(itvector = _lines.begin();itvector != _lines.end(); ++itvector){if(*itset == ++i)cout << *itvector <<endl;}}cout <<endl <<endl;
}int main(int argc,char *argv[])
{if(argc!=2){cout <<"请输入文件名"<<endl;return 0;}TextQuery tq;tq.readFile(argv[1]);while(true){cout<<"请输入你要查询的单词($结束):";string s;cin>>s;if(s=="$")break;tq.query(s);}return 0;}

运行结果如下:

c/c++文本单词查询相关推荐

  1. Java英汉翻译程序_java实现简单的英文文本单词翻译器功能示例

    本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.bufferedreader; im ...

  2. java编写翻译字典数据库_java实现简单的英文文本单词翻译器功能示例

    本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.BufferedReader; im ...

  3. 【YbtOJ AC自动机 - 1】单词查询

    单词查询 题目 给定 nnn个长度不超过 505050 的由小写英文字母组成的单词用于查询,以及一篇长为 mmm 的文章,问:文中出现了多少个待查询的单词.多组数据 输入 第一行一个整数 TTT,表示 ...

  4. java实现单词_java实现简单的英文文本单词翻译器功能示例

    导读热词 本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.BufferedReade ...

  5. c++实现文本单词查找

    文章目录 代码 运行效果 文本测试数据 书上的代码 代码 cpp primer上面第12章的练习,自己实现了一下 #include <set> #include <map> # ...

  6. 查询mysql 中的空文本_MySQL查询以显示空列的自定义文本

    让我们首先创建一个表-mysql> create table DemoTable -> ( -> FirstName varchar(20) -> ); 使用插入命令在表中插入 ...

  7. 文本单词统计(C语言)

    要求:任给一个英文文本文件,统计该文本的所有单词(不区分大小写),包括其出现的总次数,频度,以及出现的行号和位置 1.进行数据结构的准备(链表) #include<stdio.h> #in ...

  8. linux awk统计文本单词,shell统计文本中单词的出现次数

    Ubuntu14.04 给定一个文本,统计其中单词出现的次数 # solution 1 grep与awk配合使用,写成一个sh脚本 fre.sh sh fre.sh wordfretest.txt # ...

  9. python 统计哈姆雷特词汇频率_Python练习15:文本单词频率统计:哈姆雷特,练习题,英文版...

    文本词频统计::一篇文章,出现了哪些词?哪些词出现的最多? ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬ ...

  10. [Elasticsearch] 邻近匹配 (三) - 性能,关联单词查询以及Shingles

    提高性能 短语和邻近度查询比简单的match查询在性能上更昂贵.match查询只是查看词条是否存在于倒排索引(Inverted Index)中,而match_phrase查询则需要计算和比较多个可能重 ...

最新文章

  1. python之网络爬虫
  2. 基于openstack的私有云构建_阿里云杨敬宇:四层技术构建基于城市场景的边缘计算...
  3. 进度条模块tqdm介绍
  4. ABAP常用字符串操作收集整理
  5. 23 | MySQL是怎么保证数据不丢的?
  6. 编译问题 文件查找失败: ‘vant‘
  7. 如何预防光纤光缆布线中的雷击伤害
  8. oracle exp 00006,Oracle 12.1新特性----使用RMAN从备份中实现recover table
  9. pat乙级 1014 java_pat乙级1014 福尔摩斯的约会
  10. 美国亚马逊账号被锁定之后
  11. 随心所欲玩复制 详解robocopy (完)
  12. python安装包国内地址
  13. Excel 数据随机分组
  14. Hadoop——3.x安装部署
  15. 0X0000007b
  16. 笔记本电脑热点手机无法连接解决方案
  17. Python库积累之Selenium(一)-Seleniun基础
  18. 身份证校验码程序c#
  19. Cisco WLC 基础配置
  20. 轻便易用的三维建模软件

热门文章

  1. Linux系统下常用的中文输入法
  2. 怎么拆分PDF文件?分享两种拆分文件的方法
  3. Mysql分表,分区的区别和联系
  4. c语言无法定位程序输入点,WinXP提示无法定位程序输入点于动态链接库上的快速解决办法...
  5. 微信内置浏览器无法下载文件应用的解决方案
  6. IReport+JasperReport系列的坑(二)CloumnFooter与Detail之间有缝隙
  7. w7怎么更换计算机用户名和密码怎么办,win7怎么修改系统用户名
  8. java里面default是什么意思_default_default是什么意思???
  9. while循环是否加分号
  10. linux gpio管脚功能配置API