题解 | #简单错误记录#

简单错误记录

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个文件记录

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务