TextQuery tq(infile) 调用构造函数读取infile文件 并初始化成员变量file(用来保存读入文件)
在构造函数TextQuery中,定义一个string text用来保存读入文件的每一行,while(getline(is,text))不断循环,将text push_back到成员变量智能指针file中 定义一个 int n用来表示行数,又定义一个line 用来分解每一行的单词,再定义一个string word不断从line中获取单个单词,(while(line>>word))
定义一个auto &lines =wm[word];用map下标运算符提取word相关联的shared_ptr<set>,将lines绑定到指针中,
如果word不在map中,wm[word]将返回一个shared_ptr空指针,如果是空指针,那就重新指向set一片区域,,不管是否新建一个空指针,我们都调用lines将当前行号添加到set中
//第一部分结束
接下来就是调用query函数 s是我们要查的字符
定义一个shared_ptr的nodata指针,表示没有此单词
定义一个loc =wm.find(sought);
如果找到,那么调用QueryResult(sought,loc->second,file);//第一个参数是搜索关键字,第2个参数是当前的指向set的智能指针,
第3个是文件内容
//接下来
print(cout,tq.query(s))<<endl;
接下来就是print函数调用了
输出单词名,出现多少次
最后是该单词出现的行号+内容
for(auto num:*(qr.lines))
{ //输出多少行 输出该行的内容
os<<"\t(lines"<<num+1<&
在构造函数TextQuery中,定义一个string text用来保存读入文件的每一行,while(getline(is,text))不断循环,将text push_back到成员变量智能指针file中 定义一个 int n用来表示行数,又定义一个line 用来分解每一行的单词,再定义一个string word不断从line中获取单个单词,(while(line>>word))
定义一个auto &lines =wm[word];用map下标运算符提取word相关联的shared_ptr<set>,将lines绑定到指针中,
如果word不在map中,wm[word]将返回一个shared_ptr空指针,如果是空指针,那就重新指向set一片区域,,不管是否新建一个空指针,我们都调用lines将当前行号添加到set中
//第一部分结束
接下来就是调用query函数 s是我们要查的字符
定义一个shared_ptr的nodata指针,表示没有此单词
定义一个loc =wm.find(sought);
如果找到,那么调用QueryResult(sought,loc->second,file);//第一个参数是搜索关键字,第2个参数是当前的指向set的智能指针,
第3个是文件内容
//接下来
print(cout,tq.query(s))<<endl;
接下来就是print函数调用了
输出单词名,出现多少次
最后是该单词出现的行号+内容
for(auto num:*(qr.lines))
{ //输出多少行 输出该行的内容
os<<"\t(lines"<<num+1<&