C++ Primer(第5版) 练习 12.28
练习 12.28 编写程序实现文本查询,不要定义类来管理数据。你的程序应该接受一个文件,并与用户交互来查询单词。使用vector、map和set容器来保存来自文件的数据并生成查询结果。
环境:Linux Ubuntu(云服务器)
工具:vim
代码块
/*************************************************************************
> File Name: ex12.28.cpp
> Author:
> Mail:
> Created Time: Mon 22 Apr 2024 08:21:38 AM CST
************************************************************************/
#include<iostream>
#include<fstream>
#include<sstream>
#include<vector>
#include<map>
#include<set>
#include<memory>
using namespace std;
int main(){
ifstream file("12.27.txt");
vector<string> text;
map<string, set<size_t>> dict;
string str;
size_t i = 0;
while(getline(file, str)){
++i;
text.push_back(str);
istringstream in(str);
string word;
while(in>>word){
dict[word].insert(i);
}
}
while(true){
cout<<"enter word to look for, or q to quit: ";
string str;
if(!(cin>>str) || str == "q"){
break;
}
cout<<str<<" occurs "<<dict[str].size()<<" time";
cout<<(dict[str].size() > 1 ? "s" : "")<<endl;
for(size_t n : dict[str]){
cout<<'\t'<<" (line "<<n<<" ) "<<text[n-1]<<endl;
}
cout<<endl;
}
return 0;
}