zoukankan      html  css  js  c++  java
  • [编程题] 简单错误记录

    开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 
    处理:
    1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
    2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
    3.输入的文件可能带路径,记录文件名称不能带路径

    输入描述:
    一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
    文件路径为windows格式
    如:E:V1R2productfpgadrive.c 1325



    输出描述:
    将所有的记录统计并将结果输出,格式:文件名代码行数数目,一个空格隔开,如: fpgadrive.c 1325 1 
    结果根据数目从多到少排序,数目相同的情况下,按照输入第一次出现顺序排序。
    如果超过8条记录,则只输出前8条记录.
    如果文件名的长度超过16个字符,则只输出后16个字符
    输入例子:
    E:V1R2productfpgadrive.c 1325
    
    输出例子:
    fpgadrive.c 1325 1
    // ConsoleApplication4.cpp : 定义控制台应用程序的入口点。
    //
    #include "stdafx.h"
    
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    #define N 20
    
    struct err
    {
        string str;
        int linenum;
        int erronum;
    }erro[N];
    
    int main(void)
    {
        string str;
        string filename;
        int i = 0;
        int linenum;
        while (cin >> str >> linenum)
        {
            int pos = str.find_last_of('\');
            filename = str.substr(pos + 1, str.length());
            int j;
            for (j = i-1; j >= 0; j--)
            {
                if (filename == erro[j].str && linenum == erro[j].linenum)
                {
                    erro[j].erronum++;
                    break;
                }
            }
            if (j < 0 && i <= N-1)
            {
                erro[i].str = filename;
                erro[i].linenum = linenum;
                erro[i].erronum = 1;
                i++;
            }
    
        }
    
        for (int m = 1; m <= N-1;m++)
        for (int n = N-1; n >= m; n--)
        {
            if (erro[n].erronum > erro[n - 1].erronum)
                swap(erro[n], erro[n - 1]);
        }
        int count;
        if (i < 8)
        {
            count = i;
        }
        else
        {
            count = 8;
        }
        for (int k = 0; k < count; k++)
        {
            if (erro[k].str.length()>16)
            {
                erro[k].str.erase(0, erro[k].str.length() - 16);
            }
            cout << erro[k].str << ' ' << erro[k].linenum << ' ' << erro[k].erronum << endl;
        }
    
        return 0;
    }
  • 相关阅读:
    gulp serve 报错 gulp.ps1
    执行git命令时出现fatal: 'origin' does not appear to be a git repository错误
    利用 SASS 简化 `nth-child` 样式的生成
    git的一些常用命令
    回调函数
    匿名函数
    css消除行内元素的间隙
    @click.native的使用
    Element-ui 下拉列表 选项过多时如何解决卡顿问题
    vue组件通信(父子之间,兄弟之间)
  • 原文地址:https://www.cnblogs.com/hhboboy/p/5642107.html
Copyright © 2011-2022 走看看