HWOJ 简单错误记录

HWOJ 简单错误记录

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

Alt text

题目分析:
①题目首先比较每次错误,如果相同我们只需要记录一次错误,但是错误计数要加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
//2014.7.4
#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值