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;
}
运行结果显示如下

C++ //练习 12.28 编写程序实现文本查询,不要定义类来管理数据。你的程序应该接受一个文件,并与用户交互来查询单词。使用vector、map和set容器来保存来自文件的数据并生成查询结果。-LMLPHP

04-24 13:41