博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++primer 容器的综合应用:文本查询程序
阅读量:5022 次
发布时间:2019-06-12

本文共 2408 字,大约阅读时间需要 8 分钟。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 using namespace::std; 10 /*要完成简单的单词查询任务,首先需要创建一个类TextQuery来帮我们完成这个任务,在这个类中private中 11 内部调用的对象和函数,在public中创建read_file将文件读入保存在vector中并关联每个单词和行号的map容器 12 通过run_query函数查找string并返回包含单词出现的每一个行号的set对象利用text_line输出每一行*/ 13 class TextQuery{ 14 public: 15 typedef vector
::size_type line_no; 16 void read_file(ifstream &is) //该函数每次从文件中读入一行,并将它保存在容器vector中 17 //,输入完毕后,将创建关联的每个单词和行号的map容器 18 {store_file(is);build_map(); } 19 set
run_query(const string&) const; //其形参为string类型的对象,返回一个set对象,该对象包含该string对象的所有行的行号 20 string text_line(line_no) const;//其形参是一个行号,返回输入文本中该行号对应的文本行 21 22 23 private: 24 void store_file(ifstream &is); 25 void build_map(); 26 vector
lines_of_text; 27 map
> word_map; 28 }; 29 30 /*将之前输入进来的infile.txt的每行内容读到一个vector
对象中,包括.*/ 31 void TextQuery::store_file(ifstream &is) 32 { 33 string textline; 34 while(getline(is,textline)) 35 lines_of_text.push_back(textline); //store 由于是在public中因此可以访问private 的对象 36 //cout<
对象 40 然后调用set的insert函数在set对象中添加当前的行号。如果某一个单词在同一行中反复出现,则不做任何操作*/ 41 void TextQuery::build_map() 42 { 43 for(line_no line_num=0;line_num!=lines_of_text.size();++line_num ) 44 { 45 istringstream line(lines_of_text[line_num]); 46 string word; 47 while(line>>word) 48 word_map[word].insert(line_num); 49 50 } 51 } 52 /*run_query函数带有const string 类型对象的引用参数,并以这个参数作为下标来访问word_map对象。 53 如果找到了就返回一个对应的set(其中包含所有出现的行号),否则就返回一个空的set*/ 54 set
TextQuery::run_query(const string &query_word) const 55 { 56 map
>::const_iterator 57 loc=word_map.find(query_word); 58 if(loc==word_map.end()) 59 return set
(); 60 else 61 return loc->second; 62 63 } 64 /*运行run_query后,将获得一组所查找的单词出现的行号。除了要输出该单词出现的次数之外, 65 还要输出该单词所在的每一行。就是通过之前的vector
来输出*/ 66 string TextQuery::text_line(line_no line) const 67 { 68 if(line
&locs,const string &sought,const TextQuery &file) 87 { 88 typedef set
line_nums; 89 line_nums::size_type size=locs.size(); 90 cout<<"\n"<
<<" occurs "<
<<" " 91 <
<
>s;118 if(!cin||s=="q") break;119 set
locs=tq.run_query(s);120 print_result(locs,s,tq);121 122 }123 return 0;124 }
infile.txt 中的内容With some (indeed, many) C compilers, you can get away with some what's called a 'common' definition of a variable too.some some some i

转载于:https://www.cnblogs.com/lovecodepql/p/8051589.html

你可能感兴趣的文章
Tomcat基础
查看>>
spring-cloud 学习一 介绍
查看>>
Hello TWaver Android
查看>>
在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错...
查看>>
windows phone UI吐槽---跑偏了就再也跑不回来了
查看>>
利用Google Map API获取给定地址的经纬度
查看>>
Dalvik虚拟机的运行过程分析
查看>>
软件工程1
查看>>
Allan 译 The Little MongoDB Book (Chapter 2 - Updating)
查看>>
InnoDB存储引擎介绍-(6) 二. Innodb Antelope文件格式
查看>>
python篇第5天【变量】
查看>>
自定义进度条
查看>>
iOS 8个实用小技巧(总有你不知道的和你会用到的)
查看>>
python的内存管理机制
查看>>
认识电脑硬件
查看>>
[转]GREP for Windows
查看>>
Javascript:看 Javascript 规范,学 this 引用,你会懂的。
查看>>
JQueryEasyUI学习简单Demo
查看>>
移动端布局
查看>>
洛谷P2387 [NOI2014]魔法森林
查看>>