码迷,mamicode.com
首页 > 其他好文 > 详细

[转]错误记录

时间:2015-09-03 23:06:01      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

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

输入描述:

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

文件路径为windows格式

如:E:\V1R2\product\fpgadrive.c 1325

输出描述:

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

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

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

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

输入例子:

E:\V1R2\product\fpgadrive.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

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

[转]错误记录

标签:

原文地址:http://www.cnblogs.com/K2154952/p/4780819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!