1. 程式人生 > >C++Primer筆記——文本查詢程序(原創,未使用類)

C++Primer筆記——文本查詢程序(原創,未使用類)

primer color lease NPU 一個 mes getline line 筆記

技術分享圖片

 1 #include <iostream>
 2 #include <vector>
 3 #include <set>
 4 #include <map>
 5 #include <fstream>
 6 #include <sstream>
 7 #include <string>
 8 
 9 using namespace std;
10 
11 int main()
12 {
13     ifstream in;
14     in.open("C:\\Users\\HP\\Desktop\\passage.txt
"); 15 vector<string>row; //使用vector<string>來保存整個輸入文件的一份拷貝,輸入文件的每行保存為其中的每一個元素 16 map<string, set<int>>word_and_row; //使用map將每個單詞與它出現的行號set關聯起來,使用set可以保證行號不會重復且升序保存 17 string s; 18 while (getline(in, s)) 19 { 20 row.push_back(s); 21 }
22 for (size_t i = 0; i < row.size(); ++i) 23 { 24 string word; 25 istringstream read(row[i]); //使用istringstream來將每行分解為單詞 26 while (read >> word) 27 word_and_row[word].insert(i); 28 } 29 30 string s1; //s1為待查找的單詞。註意:待查找的單詞不能與句號或逗號連在一起!
31 while (cin >> s1 && s1 != "q" ) //輸入q時終止輸入 32 if (word_and_row.find(s1) != word_and_row.end()) 33 { 34 int i = word_and_row[s1].size(); 35 cout << s1 << " occurs " << i << " times" << endl; 36 for (auto d : word_and_row[s1]) 37 cout << "(line " << d + 1 << ") " << row[d] << endl; 38 39 } 40 else 41 { 42 cout << "This word can not be found in this passage! Please input a word again: " << endl; 43 } 44 in.close(); 45 46 return 0; 47 }

C++Primer筆記——文本查詢程序(原創,未使用類)