C++Primer筆記——文本查詢程序(原創,未使用類)
阿新 • • 發佈:2018-07-10
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筆記——文本查詢程序(原創,未使用類)