c/c++文本单词查询
文本查询
该程序将读取用户指定的任意文本文件,然后允许用户从该文件中查找单词。查询的结果是该单词出现的次数,并列出每次出现所在的行,如果某单词在同一行中多次出现,程序将只显示该行一次。行号按升序显示。
要求:
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++文本单词查询相关推荐
- Java英汉翻译程序_java实现简单的英文文本单词翻译器功能示例
本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.bufferedreader; im ...
- java编写翻译字典数据库_java实现简单的英文文本单词翻译器功能示例
本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.BufferedReader; im ...
- 【YbtOJ AC自动机 - 1】单词查询
单词查询 题目 给定 nnn个长度不超过 505050 的由小写英文字母组成的单词用于查询,以及一篇长为 mmm 的文章,问:文中出现了多少个待查询的单词.多组数据 输入 第一行一个整数 TTT,表示 ...
- java实现单词_java实现简单的英文文本单词翻译器功能示例
导读热词 本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.BufferedReade ...
- c++实现文本单词查找
文章目录 代码 运行效果 文本测试数据 书上的代码 代码 cpp primer上面第12章的练习,自己实现了一下 #include <set> #include <map> # ...
- 查询mysql 中的空文本_MySQL查询以显示空列的自定义文本
让我们首先创建一个表-mysql> create table DemoTable -> ( -> FirstName varchar(20) -> ); 使用插入命令在表中插入 ...
- 文本单词统计(C语言)
要求:任给一个英文文本文件,统计该文本的所有单词(不区分大小写),包括其出现的总次数,频度,以及出现的行号和位置 1.进行数据结构的准备(链表) #include<stdio.h> #in ...
- linux awk统计文本单词,shell统计文本中单词的出现次数
Ubuntu14.04 给定一个文本,统计其中单词出现的次数 # solution 1 grep与awk配合使用,写成一个sh脚本 fre.sh sh fre.sh wordfretest.txt # ...
- python 统计哈姆雷特词汇频率_Python练习15:文本单词频率统计:哈姆雷特,练习题,英文版...
文本词频统计::一篇文章,出现了哪些词?哪些词出现的最多? ...
- [Elasticsearch] 邻近匹配 (三) - 性能,关联单词查询以及Shingles
提高性能 短语和邻近度查询比简单的match查询在性能上更昂贵.match查询只是查看词条是否存在于倒排索引(Inverted Index)中,而match_phrase查询则需要计算和比较多个可能重 ...
最新文章
- python之网络爬虫
- 基于openstack的私有云构建_阿里云杨敬宇:四层技术构建基于城市场景的边缘计算...
- 进度条模块tqdm介绍
- ABAP常用字符串操作收集整理
- 23 | MySQL是怎么保证数据不丢的?
- 编译问题 文件查找失败: ‘vant‘
- 如何预防光纤光缆布线中的雷击伤害
- oracle exp 00006,Oracle 12.1新特性----使用RMAN从备份中实现recover table
- pat乙级 1014 java_pat乙级1014 福尔摩斯的约会
- 美国亚马逊账号被锁定之后
- 随心所欲玩复制 详解robocopy (完)
- python安装包国内地址
- Excel 数据随机分组
- Hadoop——3.x安装部署
- 0X0000007b
- 笔记本电脑热点手机无法连接解决方案
- Python库积累之Selenium(一)-Seleniun基础
- 身份证校验码程序c#
- Cisco WLC 基础配置
- 轻便易用的三维建模软件
热门文章
- Linux系统下常用的中文输入法
- 怎么拆分PDF文件?分享两种拆分文件的方法
- Mysql分表,分区的区别和联系
- c语言无法定位程序输入点,WinXP提示无法定位程序输入点于动态链接库上的快速解决办法...
- 微信内置浏览器无法下载文件应用的解决方案
- IReport+JasperReport系列的坑(二)CloumnFooter与Detail之间有缝隙
- w7怎么更换计算机用户名和密码怎么办,win7怎么修改系统用户名
- java里面default是什么意思_default_default是什么意思???
- while循环是否加分号
- linux gpio管脚功能配置API