日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++自学笔记_文本查询程序_《C++ Primer》

發布時間:2025/5/22 c/c++ 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++自学笔记_文本查询程序_《C++ Primer》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《C++ Primer》 第10章結束,用一個文本查詢程序結束本章 :)

?

程序將讀取用戶指定的任意文本文件,然后允許用戶從該文件中查找單詞。查詢的結果是該單詞出現的次數,并列出每次出現所在的行。如果某單詞在同一行

中多次出現,程序將只顯示該行一次。行號按照升序顯示。

?

程序支持以下任務:

  · 它必須允許用戶指明要處理的文件的名字。程序將存儲該文件的內容,以便輸出每個單詞所在的原始行。

  · 它必須將每一行分解為各個單詞,并記錄每個單詞所在的行。在輸出行號時,應保證以升序輸出,并且不重復。

  · 對特定單詞的查詢將返回出現該單詞的所有行的行號。

  · 輸出某單詞所在的行文本時,程序必須能夠根據給定的行號從輸入文件中獲取相應的行。

?

假定要查詢的文件路徑為 ?F:\C++ Primer_TXT\TextQuery.txt

TextQuery.txt:

?

Code: #include <iostream> #include <vector> #include <map> #include <set> #include <fstream> #include <sstream> #include <stdexcept>using namespace std;class TextQuery{ public:typedef vector<string>::size_type line_no;void read_file(ifstream &is){store_file(is);build_map();}set<line_no> run_query(const string&) const;string text_line(line_no) const; private:void store_file(ifstream &);void build_map();vector<string> lines_of_text;map<string,set<line_no> >word_map; };/*存儲輸入文件*/ void TextQuery::store_file(ifstream &is){string textline;while(getline(is,textline)){lines_of_text.push_back(textline);} }/*建立map容器*/ void TextQuery::build_map(){for(line_no line_num=0;line_num!=lines_of_text.size();++line_num){istringstream line(lines_of_text[line_num]);string word;while(line>>word){word_map[word].insert(line_num);}} }/*支持查詢*/ set<TextQuery::line_no> TextQuery::run_query(const string &query_word) const{map<string,set<line_no> >::const_iterator loc=word_map.find(query_word);if(loc==word_map.end())return set<line_no>();elsereturn loc->second; }/*run_query返回值的使用*/ string TextQuery::text_line(line_no line) const{if(line<lines_of_text.size())return lines_of_text[line];elsethrow out_of_range("line number out of range"); }string make_plural(TextQuery::line_no ctr,const string &word,const string &ending){return (ctr==1)? word:word+ending; }void print_results(const set<TextQuery::line_no>& locs,const string& sought,const TextQuery &file){typedef set<TextQuery::line_no> line_nums;line_nums::size_type size=locs.size();cout<<"\n"<<sought<<" occurs "<<size<<make_plural(size," time","s")<<endl;line_nums::const_iterator it=locs.begin();for( ;it!=locs.end();++it){cout<<"\t(line "<<(*it)+1<<") "<<file.text_line(*it)<<endl;} }int main() {ifstream infile;cout<<"enter a file path to query: ";string fileName;getline(cin,fileName);infile.open(fileName.c_str());TextQuery tq;tq.read_file(infile);while(true){cout<<endl<<"enter a word to look for,or q to quit: ";string str;cin>>str;if(!cin||str=="q")break;set<TextQuery::line_no> locs=tq.run_query(str);print_results(locs,str,tq);}return 0; }

?

轉載于:https://www.cnblogs.com/Murcielago/p/4164863.html

總結

以上是生活随笔為你收集整理的C++自学笔记_文本查询程序_《C++ Primer》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。