刷题长路(2):简单错误记录

题目链接:https://www.nowcoder.com/questionTerminal/67df1d7889cf4c529576383c2e647c48

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

处理:

1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径

输入描述:

一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。

输出描述:

将所有的记录统计并将结果输出,格式:文件名代码行数数目,一个空格隔开,如: fpgadrive.c 1325 1 
结果根据数目从多到少排序,数目相同的情况下,按照输入第一次出现顺序排序。
如果超过8条记录,则只输出前8条记录.
如果文件名的长度超过16个字符,则只输出后16个字符

实例

输入:

e:\1\aa3.txt 3 e:\3\aa1.txt 2 e:\2\aa2.txt 3 e:\3\aa1.txt 1 e:\1\aa1.txt 3 e:\3\aa1.txt 2 e:\1\aa3.txt 3 e:\2\aa3.txt 2 e:\1\aa1.txt 2 e:\3\aa3.txt 2 
e:\1\aa2.txt 2 e:\1\aa3.txt 1 e:\1\aa3.txt 1 e:\2\aa3.txt 2 e:\1\aa2.txt 1 e:\3\aa1.txt 2 e:\1\aa1.txt 3 e:\2\aa1.txt 1 e:\3\aa3.txt 2 e:\1\aa1.txt 1 
e:\2\aa2.txt 2 e:\3\aa3.txt 2 e:\1\aa2.txt 1 e:\1\aa3.txt 2 e:\1\aa3.txt 3 e:\1\aa2.txt 3 e:\3\aa1.txt 3 e:\2\aa2.txt 2 e:\1\aa1.txt 1 e:\2\aa3.txt 1 
e:\3\aa1.txt 1 e:\2\aa1.txt 3 e:\3\aa3.txt 2 e:\1\aa3.txt 3 e:\2\aa3.txt 3 e:\1\aa2.txt 3 e:\2\aa2.txt 1 e:\1\aa3.txt 1 e:\1\aa3.txt 1 e:\3\aa3.txt 3 
e:\3\aa3.txt 2 e:\1\aa2.txt 3 e:\1\aa2.txt 3 e:\1\aa2.txt 3 e:\1\aa1.txt 1 e:\2\aa3.txt 1 e:\3\aa3.txt 1 e:\2\aa3.txt 2 e:\3\aa1.txt 3 e:\2\aa2.txt 2 
e:\2\aa2.txt 2 e:\2\aa3.txt 1 e:\1\aa3.txt 3 e:\3\aa1.txt 2 e:\3\aa2.txt 2 e:\1\aa2.txt 1 e:\2\aa2.txt 1 e:\2\aa1.txt 2 e:\2\aa2.txt 1 e:\1\aa2.txt 1 
e:\2\aa3.txt 1 e:\2\aa2.txt 1 e:\2\aa1.txt 2 e:\3\aa2.txt 3 e:\3\aa1.txt 3 e:\2\aa2.txt 3 e:\2\aa3.txt 1 e:\3\aa3.txt 2 e:\2\aa3.txt 1 e:\1\aa1.txt 2 
e:\3\aa3.txt 1 e:\3\aa1.txt 1 e:\2\aa2.txt 3 e:\3\aa3.txt 2 e:\2\aa1.txt 3 e:\1\aa3.txt 3 e:\3\aa2.txt 1 e:\2\aa1.txt 3 e:\1\aa3.txt 3 e:\2\aa2.txt 2 
e:\1\aa1.txt 2 e:\3\aa1.txt 1 e:\1\aa3.txt 1 e:\3\aa1.txt 2 e:\1\aa1.txt 2 e:\1\aa1.txt 3 e:\3\aa1.txt 1 e:\3\aa1.txt 1 e:\2\aa3.txt 3 e:\2\aa2.txt 1 
e:\2\aa1.txt 2 e:\2\aa2.txt 1 e:\3\aa2.txt 3 e:\1\aa2.txt 1 e:\3\aa2.txt 2 e:\2\aa1.txt 1 e:\2\aa3.txt 3 e:\1\aa1.txt 2 e:\1\aa1.txt 1 e:\1\aa1.txt 2 

输出:

aa1.txt 2 14 aa3.txt 1 13 aa1.txt 1 12 aa2.txt 1 12 aa3.txt 3 11 aa3.txt 2 11 aa2.txt 3 10 aa1.txt 3 9 

代码:

#include<iostream>
#include<string.h>
#pragma warning(disable:4996);
using namespace std;
struct file_HW {
	char name[17];     // 处理后的名字
	char in_name[30];  // 输入的名字
	int line;          // 行号
	int error_num;     // 出错次数
	int time;          // 出现时间
};
void swap(file_HW *a, file_HW *b){
	file_HW *c;
	c = a;
	a = b;
	b = c;
}
int main(){
	int i,j, len, flag, num;
	char name_buffer[30];
	struct file_HW input, max_ten[30];

	//init
	for (i = 0; i < 30; i++) {
		max_ten[i].error_num = 0;
	}
	num = 100;
	while (num--) {
		cin >> input.in_name >> input.line;
		len = strlen(input.in_name);
		j = 0;
		for (i = 0; i < len; i++)   // 输入预处理
			if (input.in_name[i] == '\\') {
				j = 0;
				name_buffer[0] = '\0';
			}
			else {
				name_buffer[j] = input.in_name[i];
				name_buffer[++j] = '\0';
			}

		len = strlen(name_buffer);	
		if (len > 16) 
			for (i = 0; i < 16; i++)
				input.name[i] = name_buffer[len - 16 + i];
		else 
			for (i = 0; i < len; i++)
				input.name[i] = name_buffer[i];
		input.name[i] = '\0';
		
		for (i = 0; i < 30; i++) { //operation
			if (max_ten[i].error_num == 0) { //初次输入
				strcpy(max_ten[i].name, input.name);
				max_ten[i].line = input.line;
				max_ten[i].error_num ++;
				max_ten[i].time = num;
				break;
			}
			if (strcmp(max_ten[i].name, input.name) == 0 && max_ten[i].line == input.line) {  // 非初次输入
				max_ten[i].error_num++;
				flag = i;
				while (max_ten[flag].error_num > max_ten[flag - 1].error_num && flag > 0) { // 大小原因改变顺序
					swap(max_ten[flag], max_ten[flag - 1]);
					flag--;
				}
				while (max_ten[flag].error_num == max_ten[flag - 1].error_num && flag > 0 && max_ten[flag].time > max_ten[flag - 1].time) {  // 时间原因改变顺序
					swap(max_ten[flag], max_ten[flag - 1]);
					flag--;
				}
				break;
			}
		}
	}
	j = 0;
	while (max_ten[j].error_num != 0 && j < 8) {  // 输出
		i = 0;
		while (max_ten[j].name[i] != '\0')
			cout << max_ten[j].name[i++];
		cout << ' ' << max_ten[j].line << ' '<< max_ten[j].error_num << endl;
		j++;
	}
	return 0;
}

步骤分析:

  1. 数据预处理
  2. 判断输入类型:首次输入3 or 已有错误4
  3. 初始化数据结构
  4. 增大错误次数,并且调整次序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值