HJ19 简单错误记录

问题概要

开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
对应牛客网题目HJ19 简单错误记录

思路分析

其实这个题目并没有用到特别复杂的技巧,重点是对字符串的处理,以及模拟整个记录的过程。

代码实现

#include <stdio.h>
#include <string.h>

#define MAX_ERROR_RECORDS 100
#define MAX_FILENAME_LENGTH 17

// 定义错误记录结构体
typedef struct {
    char filename[MAX_FILENAME_LENGTH]; // 存储文件名的后16个字符
    int line_number; // 存储行号
    int cnt; // 存储错误次数
} ErrorRecord;

int main() {
    char in_str[200];
    int num;
    int head = 0;
    ErrorRecord list[MAX_ERROR_RECORDS];

    memset(list, 0, sizeof(list));

    while (scanf("%s %d", in_str, &num) != EOF) {
        char* p = strrchr(in_str, '\\'); // 找到最后一个斜杠
        if (p == NULL) {
            p = in_str; // 如果没有斜杠,即文件名即为整个输入字符串
        } else {
            ++p; // 移动指针,跳过斜杠
            // 如果存在盘符,则跳过盘符和冒号
            if (p[1] == ':') {
                p += 2;
            }
        }

        int len = strlen(p);
        strncpy(list[head].filename,
                len > 16 ? p + len - 16 : p,
                MAX_FILENAME_LENGTH - 1);
        list[head].filename[MAX_FILENAME_LENGTH - 1] =
            '\0'; //确保文件名称字符串的结束符
        list[head].line_number = num;

        int found = 0;
        for (int i = 0; i < head; ++i) {
            if (strcmp(list[i].filename, list[head].filename) == 0 &&
                    list[i].line_number == list[head].line_number) {
                ++list[i].cnt;
                found = 1;
                break;
            }
        }

        if (!found) {
            ++list[head].cnt;
            ++head;
            if (head == MAX_ERROR_RECORDS) {
                head = 0; // 循环记录
            }
        }
    }

    // 输出最后的错误记录
    int start = head >= 8 ? head - 8 : 0;
    for (int i = start; i < head; i++) {
        printf("%s %d %d\n", list[i].filename, list[i].line_number, list[i].cnt);
    }

    return 0;
}

这个代码虽然不复杂,但想要理解,还是需要好好的从头看一遍的。
希望本篇文章能对您有所帮助。
感谢阅读w

相关推荐

  1. HJ19错误简单记录

    2024-05-10 13:36:05       35 阅读
  2. HJ19 简单错误记录

    2024-05-10 13:36:05       39 阅读
  3. HJ8 合并表记录

    2024-05-10 13:36:05       49 阅读
  4. 12 简历错误以及如何避免这些错误

    2024-05-10 13:36:05       56 阅读
  5. HJ14 字符串排序

    2024-05-10 13:36:05       56 阅读
  6. HJ11 数字颠倒

    2024-05-10 13:36:05       33 阅读
  7. HJ8 合并表记录【C语言】

    2024-05-10 13:36:05       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 13:36:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 13:36:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 13:36:05       87 阅读
  4. Python语言-面向对象

    2024-05-10 13:36:05       96 阅读

热门阅读

  1. Qt——HighLight篇

    2024-05-10 13:36:05       38 阅读
  2. Docker快速启动清单

    2024-05-10 13:36:05       31 阅读
  3. 论UML在学情精准测评系统中的应用

    2024-05-10 13:36:05       32 阅读
  4. 一款自动化监控收集资产的工具

    2024-05-10 13:36:05       31 阅读
  5. git如何查看密码

    2024-05-10 13:36:05       34 阅读
  6. Zookeeper集群搭建的一些问题

    2024-05-10 13:36:05       32 阅读
  7. Go 使用mqtt

    2024-05-10 13:36:05       32 阅读
  8. 企微SCRM营销:解锁客户关系管理新篇章

    2024-05-10 13:36:05       36 阅读
  9. 自我模拟面试

    2024-05-10 13:36:05       28 阅读