zoukankan      html  css  js  c++  java
  • [转]错误记录

    题目:简单错误记录
    题目描述:
    开发一个简单的错误记录功能模块,能够记录出错的代码所在的文件名称和行号。
    处理:
    1、记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条错误,错误计数增加;
    2、超过16个字符的文件名称,只记录文件的最后有效16个字符;
    3、输入的文件可能带路径,记录文件名称不能带路径

    输入描述:

    一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。

    文件路径为windows格式

    如:E:V1R2productfpgadrive.c 1325

    输出描述:

    将所有的记录统计并将结果输出,格式:文件名代码行数数目,一个空格隔开,如: fpgadrive.c 1325 1 

    结果根据数目从多到少排序,数目相同的情况下,按照输入第一次出现顺序排序。

    如果超过8条记录,则只输出前8条记录.

    如果文件名的长度超过16个字符,则只输出后16个字符

    输入例子:

    E:V1R2productfpgadrive.c 1325

    输出例子:

    fpgadrive.c 1325 1
     

     
    题目分析:
    ①题目首先比较每次错误,如果相同我们只需要记录一次错误,但是错误计数要加1;所以我们想到要把每次错误储存在一个二维数组中,这个数组为8行17列store[8][17]
    ②我们要记录错误计数,因为每个错误可能次数不一样,所以我们也定义一个一维数组counts[i]
    ③超过16个字符的文件名称,我们只记录文件的最后有效16个字符,所以我们要区分开舒瑞虎的文件名称和行数,所以我们又需要定义一个一维数组保存错误所在行号rows[]
    ④检测文件名称的长度,我们需要从后往前数,检测/字符,这里需要注意C语言中转义字符用双右斜杠表示转义字符。
    ⑤我们还需要一个计较每次错误是不是相等,我们可以利用字符串中strcmp来比较,而且行也需要相等,如果是第一次输入时,我们就不需要比较。之后每输入一次都要和前面每一次进行比较。用循环解决
    ⑥如果不相等,我们就直接将字符串拷贝到store中,用字符串处理strcpy
    ⑦最后输出格式,由题意可以知道我们这里要输出前面所有的错误,所有我们要采用一个for循环,输出所有的错误。错误中包含store[],rows[],counts[]
    学习笔记:
    ①充分利用数组来完成算法
    如果有很多个字符串需要保存,我们需要用字符串数组,二维数组来保存,store[i]表示一个字符串
    ②充分利用字符串的功能strcpy拷贝和strcmp比较
    ③注意如果我们知道一个数组的初始地址的时候,我需要表示字符串后面的字符串我们可以这样表示&s[len - 1 -i]。学会这种表示方法

    =============================================================================
    参考代码:

    //简单错误记录.cpp
    #include <iostream>
    #include <string>
    using namespace std;
    const int maxn = 1000;
    char s[maxn];
    
    int main()
    {
        //初始化
        char store[8][17] = {0};
        int counts[8] = {0};
        int rows[8] = {0};
        int row,kase = 0;
    
        //输入
        while(cin >> s >> row)
        {
            int len = strlen(s);
            int i;
    
            //只保留最后有效字符16个字符
            for(i = 0;i < 16; i++)
            {
                if(s[len - 1 - i] == '\')
                    break;
            }
    
            //判断是不是相同
            i--;
            int equal = 0;
            for(int j = 0;j < kase; j++)
            {
                if(strcmp(store[j],&s[len - 1 -i]) == 0 &&  row == rows[j])
                {
                    equal = 1;
                    counts[j]++;
                    break;
                }
            }
    
    
            //如果不相同
            if(!equal)
            {
                strcpy(store[kase], &s[len - 1 -i]);
                rows[kase] = row;
                counts[kase]++;
                kase ++;
            }
    
            for(int j = 0; j < kase; j++)
            {
                cout << store[j] << " " << rows[j] << " " << counts[j] << endl;
            }
        }
        return 0;
    }

    转自:http://m.blog.csdn.net/blog/to_xidianhph_youth_2010/37419629

    看了好多实现错误记录功能的例子,这篇写的是最基础的。。大牛好厉害(我太菜了。。)。

  • 相关阅读:
    【oracle】查看表空间对应文件所在位置
    【oracle】查看表空间信息
    【java异常】java.lang.Integer cannot be cast to java.lang.String
    【oracle】DATE输出是什么东西
    数字万用表的精度和分辨率,ADC的位数
    二阶系统
    Verilog中实现电平检测
    模拟信号和数字信号,直流信号和交流信号
    噪声:强度,方差信噪比(待完善)
    Simulink模块之Band-Limited White Noise
  • 原文地址:https://www.cnblogs.com/K2154952/p/4780819.html
Copyright © 2011-2022 走看看