题解 | #简单错误记录#

简单错误记录

https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {  //定义储存结构体
    char str[100];
    int line;
    int num;
} err;

int main() {
    int k = 99;  
    err stack[100];  
    char* tem = (char*)malloc(sizeof(char) * 100);  //暂存每次scanf的全部输入字符串
    int tem_line = 0; //暂存输入行数
    int j = 0;
    while (~scanf("%s %d", tem, &tem_line)) {  //当存在输入时
        int i = 0;
        int n = strlen(tem);
        char* p = NULL;  //创建指针寄存搜索位置
        for (i = 0; i < n; i++) {   //从输入字符串头部开始搜索找到最后一个\
            if (tem[i] == '\\') {
                p = &tem[i];    //将地址存入p
            }
        }
        p += 1;  //p的地址往前一位指向文件名
        int n_t = strlen(p);   //获取文件名长度
        if (n_t > 16) {
            p = p + (n_t - 16);    //当文件名大于16位时,截取后16位
        }

        int flag = 0;  //重复标志
        for (i = k + 1; i <= 99; i++) {  //判断与之前储存的文件名是否有重复
            if (strcmp(p, stack[i].str) == 0 && tem_line == stack[i].line) {
                stack[i].num += 1;  //如果重复,重复的文件名数量+1
                flag = 1;      //重复标志记为1
                break;         
            }
        }
        if (k >= 0) {         //若没有超出数组索引
            if (!flag) {      //若没有重复,则将暂存文件名和行数存入结构体stack[k]中,初始化num为1
                strcpy(stack[k].str, p);
                stack[k].line = tem_line;
                stack[k].num = 1;
                k--;          //k往后移动
            }
        } else if (k < 0) {   //若超出数组索引(其实可以不用写这个...)
            if (!flag) {
                for (i = 99; i >= 1; i--) {
                    stack[i] = stack[i - 1];
                }
                strcpy(stack[0].str, p);
                stack[0].line = tem_line;
                stack[0].num = 1;
                k--;
            }
        }


    }
    if (k <= 91) {   //如果输入数据大于8行
        for (j = k + 8; j >= k + 1; j--) {
            printf("%s %d %d\n", stack[j].str, stack[j].line, stack[j].num);
        }
    } else if (k > 91)  //小于8行
        for (j = 99; j >= k + 1; j--) {
            printf("%s %d %d\n", stack[j].str, stack[j].line, stack[j].num);
        }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务