首页 > 其他分享 >华为机试HJ19 简单错误记录

华为机试HJ19 简单错误记录

时间:2024-11-03 16:51:34浏览次数:5  
标签:count 错误 记录 HJ19 16 recordinfo int 华为 机试

首先看一下题

描述

开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 

处理: 

1、 记录最多8条错误记录,循环记录,最后只用输出最后出现的八条错误记录。对相同的错误记录只记录一条,但是错误计数增加。最后一个斜杠后面的带后缀名的部分(保留最后16位)和行号完全匹配的记录才做算是相同的错误记录。

2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;

3、 输入的文件可能带路径,记录文件名称不能带路径。也就是说,哪怕不同路径下的文件,如果它们的名字的后16个字符相同,也被视为相同的错误记录

4、循环记录时,只以第一次出现的顺序为准,后面重复的不会更新它的出现时间,仍以第一次为准

数据范围:错误记录数量满足 1≤n≤100  ,每条记录长度满足  1≤len≤100 

输入描述:

每组只包含一个测试用例。一个测试用例包含一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。

输出描述:

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

示例1

输入:

D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645
E:\je\rzuwnjvnuz 633
C:\km\tgjwpb\gy\atl 637
F:\weioj\hadd\connsh\rwyfvzsopsuiqjnr 647
E:\ns\mfwj\wqkoki\eez 648
D:\cfmwafhhgeyawnool 649
E:\czt\opwip\osnll\c 637
G:\nt\f 633
F:\fop\ywzqaop 631
F:\yay\jc\ywzqaop 631
D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645

输出:

rzuwnjvnuz 633 1
atl 637 1
rwyfvzsopsuiqjnr 647 1
eez 648 1
fmwafhhgeyawnool 649 1
c 637 1
f 633 1
ywzqaop 631 2

复制说明:

由于D:\cfmwafhhgeyawnool 649的文件名长度超过了16个字符,达到了17,所以第一个字符'c'应该被忽略。
记录F:\fop\ywzqaop 631和F:\yay\jc\ywzqaop 631由于文件名和行号相同,因此被视为同一个错误记录,哪怕它们的路径是不同的。
由于循环记录时,只以第一次出现的顺序为准,后面重复的不会更新它的出现时间,仍以第一次为准,所以D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645不会被记录。  

一、问题分析

首先读题,题目要求:

1.开发一个简单的错误记录功能小模块

2.能够记录出错的代码所在的文件名和行号

3.记录最多8条错误记录

4.循环记录

5.只输出最后出现的八条错误记录

6.相同的错误只需要记录一条,但是错误计数累加

7.最后的一个斜杠后面的带后缀名的部分(保留16位)和行号这两个都完全匹配的才是“相同”的错误

8.超过16个字符的文件名,只记录文件的最后有效16个字符

9.输入的文件可能带路径,但是记录的文件名称不带路径,哪怕文件路径不同,只要名字的最后16个字符相同,也被视为相同的错误记录

这里我有点疑问,是不是最后十六位和行号都需要相同才算是相同的错误记录?

10.循环记录时,只以第一次出现的顺序为准,后面重复的不会更新他的出现时间,仍以第一次为准

这句话我认为意思是说我们虽然只需要输出8条记录但是我们要记录全部的错误记录,这样才能记住之前出现的时间,才能保证后面重复的出现不会更新他的出现时间

11.错误记录数量n在[1,100]的范围

12.每条记录的长度len在[1,100]的范围

13.输入描述:每组只包含一个测试用例.一个测试用例包含一行或多行字符串.每行包括带路径文件名称,行号,以空格隔开.

14.输出描述:将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开

二、解题思路

1.首先我们需要定义一个字符串record[101]一个整数line用来读取错误记录

2.然后我们思考一下用什么储存我们的错误记录

首先我们需要储存的数据有文件名、代码行数、错误次数这三种数据

我们可以定义一个字符串数组recordname[错误记录数量][17]用来存储我们错误的记录的名字

其中错误记录数量是我们给他分配的空间,在读取的过程中我们使用到的空间时候可能会小于这个数字,使用的时候我们将错误记录的序号记录在上面

然后我们定义一个数组recordinfo[错误记录数量][2]用来记录我们错误记录的代码行数、错误次数这两个数据分别对应recordinfo[错误记录数量][0]和recordinfo[错误记录数量][1]

3.我们还需要一个整数int count = 0;用来计算我们的出现的错误记录数量

4.然后我们就可以开始逐行读取数据了

5.我们先把数据存储到record和line中

6.我们将record中最后的/之后的部分储存到一个新的char filename[100]中

7.我们使用strlen测量一下filename的长度并且将长度储存到len中

8.对于长度大于16的情况,我们只保留最后16个字符,也就是说我们

定义一个char newfilename[17];

比如filename的长度是20,

我们截取第3-19个位置的字符到我们的newfilename的第0-16个位置中.然后我们第17位设为'\0'字符串结束符

处理完名字之后我们开始在现有的记录中查找是否有相同的记录,如果有(名字相同且行数相同)那么我们错误次数加一

如果没有相同的记录那么我们count加一,并且将recordname[count] = newfilename;

recordinfo[count][0] = line;

recordinfo[count][1] = 1;

9.循环结束后我们做一个判断,

如果count >= 8 

比如有九条记录,那么我们输出第2-9条记录

也就是count-8到count

如果count < 8,那么我们输出从0到count的记录

三、具体步骤

使用的语言是C

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

char* getFilename(const char *path) {
    int len = strlen(path);
    for(int i = len; i > 0; i--) {
        if(path[i] == '\\') {
            return (char*)(path + i + 1);
            break;
        }
    }
    return (char*)path;
}
int main() {
    char record[101];
    int linenumber;
    char recordname[100][17];
    int recordinfo[100][2];
    int count = 0;
    while (scanf("%s %d", record, &linenumber) != EOF) { 
        char *filename = getFilename(record);
        //printf("filename is %s\n", filename);
        int len = strlen(filename);
        char newfilename[17];
        if (len > 16) {
            strncpy(newfilename, filename + len - 16, 16);
            newfilename[16] = '\0';
        } else {
            strcpy(newfilename, filename);
        }
        int findsame = 0;
        for(int i = 0; i < count; i++){
            if((strcmp(recordname[i], newfilename) == 0) && (recordinfo[i][0] == linenumber)){
                recordinfo[i][1]++;
                // printf("when file name is %s, the i is %d\n", recordname[i], i);
                // printf("the new filename is %s", newfilename);
                // printf("find same error.\n");
                findsame = 1;
                break;
            }
        }
        if(findsame == 0){
            strcpy(recordname[count], newfilename);
            recordinfo[count][0] = linenumber;
            recordinfo[count++][1] = 1;
        }
    }

    if(count > 8) {
        for(int i = count - 8; i < count; i++){
            printf("%s %d %d\n", recordname[i], recordinfo[i][0], recordinfo[i][1]);
        }
    } else {
        for(int i = 0; i < count; i++) {
            printf("%s %d %d\n", recordname[i], recordinfo[i][0], recordinfo[i][1]);
        }
    }
    return 0;
}

作者:来泡池子了的西红柿很奔放
链接:https://www.nowcoder.com/discuss/681233127540355072
来源:牛客网

20241030 18:00 - 20:18

标签:count,错误,记录,HJ19,16,recordinfo,int,华为,机试
From: https://blog.csdn.net/bingw0114/article/details/143370090

相关文章

  • 华为机试HJ20 密码验证合格程序
    首先看一下题描述密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有长度大于2的包含公共元素的子串重复(注:其他符号不含空格或换行) 数据范围:输入的字符串长度满足 1≤n≤100 输入描述:一组字符串。输出描述:如果符合要求输出......
  • 华为机试HJ16 购物单
    首先看一下题描述王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件附件电脑打印机,扫描仪书柜图书书桌台灯,文具工作椅无如果要买归类为附件的物品,必须先买该附件所属的主件,且每件物品只能购买一次。每个......
  • 华为机试HJ18 识别有效的IP地址和掩码并进行分类统计
    首先看一下题描述请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。所有的IP地址划分为 A,B,C,D,E五类A类地址从1.0.0.0到126.255.255.255;B类地址从128.0.0.0到191.255.255.255;C类地址从192.0.0.0到223.255.255.255;......
  • 华为OD机试-E卷,100分 - 最小的调整次数特异性双端队列Java & Python& JS & C++ & C
    最新华为OD机试题目描述有一个特异性的双端队列,该队列可以从头部或尾部添加数据,但是只能从头部移出数据。小A依次执行2n个指令往队列中添加数据和移出数据。其中n个指令是添加数据(可能从头部添加、也可能从尾部添加),依次添加1到n;n个指令是移出数据。现在要求移除数据的顺......
  • 华为OD机试-E卷100分 -货币单位换算Java & Python& JS & C++ & C
    最新华为OD机试题目描述记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃......
  • 华为开发者 云托管
    本文地址目录目录目录华为开发者云托管app上架要求华为云托管官方文档典型场景接入步骤使用限制华为开发者云托管app上架要求上架app到华为商店(AppGalleryConnect,AGC)需要准备的资料有:基础条件app签名,特殊权限授权证书app信息:图标、五图、应用介绍、分类隐......
  • 5个有效的华为(HUAWEI)手机数据恢复方法
    5个有效的手机数据恢复方法华为智能手机中的数据丢失比许多人认为的更为普遍。发生这种类型的丢失有多种不同的原因,因此数据恢复软件的重要性。您永远不知道您的智能手机何时会在这方面垮台;因此,预防总比哀叹好,这就是为什么众多智能手机用户选择此类软件的原因。尽管有很多解决......
  • 华为大模型面试通关秘籍:50道高频面试题及答案解析
    觉得中大厂面试太难的,完全就是自己没准备充分,技术不到位,没准备的面试完全是浪费时间,更是对自己的不负责!.今天我给大家分享一下我整理的**《精选50个大模型高频面试题》**大模型面试专题和答案,其中大部分都是面试常问的面试题,可以对照这查漏补缺奥!祝大家早日上岸呀!1.简......
  • 华为OD机试-(E卷,100分) - 热点网站统计(Java & Python& JS & C++ & C )
    最新华为OD机试题目描述企业路由器的统计页面,有一个功能需要动态统计公司访问最多的网页URLtopN。请设计一个算法,可以高效动态统计TopN的页面。输入描述每一行都是一个URL或一个数字,如果是URL,代表一段时间内的网页访问;如果是一个数字N,代表本次需要输出的TopN个URL......
  • 天津大学2024华为杯I.个大的大个 题解
    原题链接https://acm.tju.edu.cn/problem/P2040学校oj好像挂了,题解发不出去,又没有草稿功能,所以先存在这里了。前言华为杯时候对字符串不太熟,加上看错题了导致没做出这题,很可惜,苦练几个月,现在已经成为串串大师,回过头来秒一下这题发个题解泄恨。题意给定一个长为\(n\)的字符......