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;
    }
  • 相关阅读:
    C# 生成随机数
    C#经典机试题(猫叫)
    C#开发微信公众平台-就这么简单(附Demo)(转)
    对于初学者文档应该怎么编写呢?使用什么模板或格式?
    c#基础系列(转)
    如何写软件设计文档(转)
    C# 使用线程池,设置每个线程的执行时间,过了时间强制结束
    C#多线程编程总结
    最全的sublime插件整理
    Node.js安装及环境配置之Windows篇
  • 原文地址:https://www.cnblogs.com/hhboboy/p/5642107.html
Copyright © 2011-2022 走看看