/* 思路:map<string, int> 与 dequeue<string> 配合使用 1. 创建 map<string, int> 表, 键是文件名加行号的组合, 值 是 出现的次数 2. 创建 dequeue<string>, 像其中插入 文件名加行号的组合, 并维持其大小不超过八 3. 注意对输入字符串的处理, a. 首先用 str.find_last_of('\\') 获取最后一个反斜杠的位置 b. 判断文件名是否大于16个字符,超过16个的话,需要截断。 */ #include <deque> #include<iostream> #include <map> using namespace std; int main(){ string str; map<string, int> mymap; deque<string> deq; while(getline(cin, str)){ int pos = str.find_last_of('\\'); str = str.substr(pos+1); pos = str.find_last_of(' '); if(pos > 16){ str = str.substr(pos-16); } if(mymap.find(str) == mymap.end()){ deq.push_back(str); } if(deq.size() > 8){ deq.pop_front(); } mymap[str]++; } for(auto s : deq){ cout << s << " " << mymap[s] << endl; } return 0; }