定义一个map,将单词与一个行号的list关联,list中保存的是单词所出现的行号。
#include <iostream>
#include <map>
#include <string>
#include <sstream>
#include <list>
using namespace std;
int main()
{
//模拟测试文本,注意每行最后有个换行符
const string s = "Spring is gay with flower and song\n"
"Summer is hot and days are long\n"
"Autumn is rich with fruit and grain\n"
"Winter brings snow and the New Year again\n";
istringstream iss_line(s); //行字符串流
istringstream iss_word; //词字符串流
string line, word;
unsigned line_no = 0; //行号
map<string, list<int>> m; //map容器
//外层循环按行读取
while(getline(iss_line, line))
{
//内层读取单词
iss_word.str(line);
++line_no; //行号加1
while(iss_word >> word)
{
m[word].push_back(line_no); //将单词与所在行号记入map中
}
iss_word.clear(); //清除流状态,以便下次仍能正常读取
}
//显示
for(auto e : m)
{
cout << "Word: " << e.first << "\tLine num: ";
for(auto n : e.second)
cout << n << " ";
cout << endl;
}
return 0;
}
执行结果: