题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
#include <bits/stdc++.h>
using namespace std;
map <string , int> m;
int cnt = 0;
vector <string> sum(8,"");
string b,num;
string get_string(string now)
{
string ans = "";
int pos=0;
for(int i = now.length() - 1 ; i >= 0 ; i--)
if(now[i] == '\\') // '\' 前要加转义字符 \ -> '\\'
{
pos = i+1;//定位到\\键后一个字母上
break;
}
while(now.length() - pos > 16)
pos++;
for(int i = pos ; i < now.length(); i++)
ans = ans + now[i];
return ans;
}
int main() {
while (cin>> b >> num) { // 注意 while 处理多个 case
string name = get_string(b);
string full_name = name + " " + num;
//cout<<name<<" "<<full_name<<endl;
if(m.find(full_name) == m.end())
{
m[full_name] = 1;
sum[cnt] = full_name;
cnt = (cnt+1) % 8;//有新文件出现,vector才会增加
}
else {
m[full_name]++;
}
}
for(int i = 0 ; i < 8 ; i++)
{
if(sum[cnt] != "")
cout<<sum[cnt]<<" "<<m[sum[cnt]]<<endl;
cnt = (cnt+1) % 8;
}
}
// 64 位输出请用 printf("%lld")
利用数组下标,完成截断。
然后用一个map作为哈希表,储存字符串和出现次数。
用一个vector ,保证只储存最近的8个文件记录
查看25道真题和解析