华为机试HJ19 简单错误记录

首先看一下题

描述

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

处理: 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463249.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模型 康威定律(沟通VS技术架构)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。组织结构塑造系统架构。 1 康威定律的应用 1.1 某金融科技公司支付系统的微服务架构 某金融科技公司的支付系统采用微服务架构&#xff0c;团队按照功能模块划分为支付网关团队、账户管理团队、风控…

AppInventor2能否用网络摄像头画面作为屏幕的背景?

// 视频是否可以作为背景&#xff1f; // 有会员提问&#xff1a;能否用网络摄像头的实时画面作为屏幕的背景&#xff1f;就跟这个一样背景全覆盖&#xff1a; 摄像头画面是一个在线的网站链接视频流。 // 原先思路 // 1、目前原生组件无法直接实现这个功能&#xff0c;屏幕…

AI时代,一篇雄文说清楚CPU与GPU的区别

一、CPU与GPU的概念 先说说大家最熟悉的CPU,英文全称Central Processing Unit,中央处理器。 但凡是个人都知道,CPU是计算机的心脏。 运算器和控制器这两个核心功能,都是由CPU负责承担的。 具体来说,运算器(包括加法器、减法器、乘法器、除法器),负责执行算术和逻辑运…

类和对象—上

目录 一、面向过程和面向对象初步认识 1.面向过程介绍 2.面向对象 二、类的引入 1.可以利用关键字struct来定义类的原因 1.1.C可以使用struct来定义类的原因是 2.利用关键字struct定义类及访问类成员的案例 3.使用关键字struct定义结构体、定义类的区别 3.1.C语言的结…

AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和工作学习方法 AJ-Report是一个基于Java的开源报表工具&#xff0c;它集成了ECharts、Ant Design Vue等前端技术&#xff0c;致力于为企业提供一站式的数据可视化解决方案…

论文阅读:MultiUI 利用网页UI进行丰富文本的视觉理解

《HARNESSING WEBPAGE UIS FOR TEXT-RICH VISUAL UNDERSTANDING》 利用网页UI进行丰富文本的视觉理解 总结 grounding和QA部分的数据集占比较大、同时消融实验显示其作用相对较大&#xff0c;并且grounding部分作用和效果呈现scaling正相关提供了很多web数据处理成多模态训练…

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern)

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern) 定义 断路器模式&#xff08;Circuit Breaker Pattern&#xff09;是云计算和微服务架构中的一种保护性设计模式&#xff0c;其目的是避免系统中的调用链出现故障时&#xff0c;导致系统瘫痪。通过断路器模式&#xff…

roberta融合模型创新中文新闻文本标题分类

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

win11安装安卓apk原生应用,并设置网络代理

一、win11安装安卓apk原生应用&#xff0c;查看https://blog.csdn.net/qq_33704787/article/details/123658419https://blog.csdn.net/qq_33704787/article/details/123658419 主要是安装&#xff1a;Windows Subsystem for Android™ with Amazon Appstore 二、使用ABD工具设…

计算机网络(Ⅵ)应用层原理

一些网络应用的例子: E-mail Internaet电话 Web 电子支付 文本信息 搜索 P2P文件共享 流媒体 即时通讯 实时电视会议 .... .... 创建一个网络应用&#xff1a; 1.编程 2.在不同的端系统上运行。 网络应用的体系架构 可能的应用架构 1.客户-服…

【调优方法】——warmup预热

文章目录 什么是warmup?为什么引入warmup&#xff1f;warmup策略1. 线性warmup&#xff08;虚线&#xff09;2. 指数warmup&#xff08;点划线&#xff09; warmup改进参考文献 什么是warmup? warmup是一种学习率预热的方法&#xff0c;是指在训练开始时使用较小的学习率&am…

【Java笔记】1-JDK/JRE/JVM是个啥?

JDK、JRE、JVM可以说是入门必须了解的三个词汇 先说全称 JDK&#xff1a;Java Development Kit&#xff0c;Java开发工具包 JRE&#xff1a;Java Runtime Environment&#xff0c;Java运行环境 JVM&#xff1a;Java Virtual Machine&#xff0c;Java虚拟机 再说关系 JVM⊆J…

阿里云docker安装禅道记录

docker network ls docker network create -d bridge cl_network sudo docker run --name zentao --restart always -p 9982:80 --networkcl_network -v /data/zentao:/data -e MYSQL_INTERNALtrue -d hub.zentao.net/app/zentao:18.5 参考&#xff1a;用docker安装禅道…

uniapp iOS打包证书过期——重新下载证书及更新文件

证书过期&#xff0c;重新生成步骤 关于所需的证书、标识符、描述文件等请查看iOS打包证书申请流程证书有效期为1年 过期提示 生成证书 点击 钥匙串访问 → 证书助理 → 从证书颁发机构请求证书 &#xff1b; 我这里选择 存储到磁盘 &#xff0c;邮件、名称 可自定义&#…

Pandas 数据清洗

1.数据清洗定义 数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况&#xff0c;如果要使数据分析更加准确&#xff0c;就需要对这些没有用的数据进行处理。 2.清洗空值 DataFrame.dropna(axis0, howany, threshN…

数据结构与算法(1)

一&#xff1a;文章总体结构内容解读 二&#xff1a;绪论 1.1研究&#xff1a; 1.范围 数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科&#xff1b; 2.计算机解决问题步骤&#xff1a; 1.2基本概念和术语&#xff1a; 1.数据、…

RNN与Self-Attention

文章目录 1. SimpleRNN1.1 h t h_t ht​计算1.2 激活函数 2. SimpleRNNSelf-Attention2.1 状态更新2.2 权重 α α α 1. SimpleRNN 学习视频&#xff1a;https://www.youtube.com/watch?vCc4ENs6BHQw&t0s 对于时序数据&#xff0c;输入输出都不固定&#xff0c;需要ma…

Vue指令:v-show、v-if

目录 1.v-show:频繁控制显示隐藏 v-if:要么显示&#xff0c;要么隐藏 2.网页渲染效果 3.flag:true 4.若flag:false&#xff0c;则 5.底层原理&#xff1a; 1.v-show:频繁控制显示隐藏 v-if:要么显示&#xff0c;要么隐藏 <!DOCTYPE html> <html lang"en&…

在Springboot中更好的打印日志

说明 我的系统缺乏一些日志打印,但我并不想显式的在我的业务代码中使用Slf4j注解,因为这会造成我无法关注我的业务代码逻辑,因为通常来说,10行业务代码 你可以就需要3-4行log.info来打印日志 是的,这样代码很难看,所以我使用了Aop 拦截器 面向对象 threadLoacl等技术来设计我…

进程间通信小练习

[!info] 编写程序 创建两个进程&#xff1a; 父进程执行文件拷贝操作。如果接收到SIGUSR1信号&#xff0c;将打印出当前拷贝进度。 子进程每隔一个固定时间向父进程发生SIGUSR1信号。 vi src.txt然后输几十个字 然后新建源程序 #include <stdio.h> #include <stdli…