HJ19. 简单错误记录
描述
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
输入描述
每组只包含一个测试用例。一个测试用例包含一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
输出描述
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:
示例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不会被记录。C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2021-05-24
#include <stdio.h> #include <string.h> typedef struct _LIST_STR_T { char name[200]; int number; int times; }LIST_STR_T; int main(void) { char in_str[200] = {0}; int num = 0; int head = 0; int i = 0; int len = 0; LIST_STR_T list[100]; char *p = NULL; memset(&list, 0, sizeof(list)); while (scanf("%s %d", in_str, &num)!=EOF) { p = strrchr(in_str, '\\'); len = strlen(++p); p = len>16?p+len-16:p; for (i = 0; i < head; i++) { if ((0 == strcmp(list[i].name, p)) && (num == list[i].number)) { break; } } if (i == head) { strcpy(list[head].name, p); list[head].number = num; ++list[head].times; ++head; } else { ++list[i].times; } } for (i = (head-8>0?head-8:0); i < head; i++) { printf("%s %d %d\n",list[i].name,list[i].number,list[i].times); } }
C 解法, 执行用时: 1ms, 内存消耗: 328KB, 提交时间: 2021-10-16
#include <stdio.h> #include <string.h> int main(){ char s1[200]={'\0'}; char s2[200]={'\0'}; char cc[8][17]={{"\0"}},cd[8][4]={{"\0"}}; char chu[100][17]={{"\0"}},chd[100][4]={{"\0"}}; int cf[8]={1,1,1,1,1,1,1,1}; int mnt=0; while(scanf("%s",s1)!=EOF&&scanf("%s",s2)!=EOF){ int flagt=0; int slen=strlen(s1); char ming[17]={'\0'}; char mingc[50]={'\0'}; int i=slen-1,ln=slen-1,count=0; for(;s1[i]!='\\'&&slen-i<=16;i--); for(;s1[ln]!='\\';ln--);//用不到的代码 int p=0; for(i=i+1;i<slen;i++){ ming[count++]=s1[i]; } count=0; for(ln=ln+1;ln<slen;ln++){ mingc[count++]=s1[ln]; } strcpy(chu[mnt],ming); strcpy(chd[mnt],s2); mnt++; for(;p<mnt-1;p++){ if(strcmp(chu[p],ming)==0&&strcmp(chd[p],s2)==0){ for(count=0;count<8;count++){ if(strcmp(cc[count],ming)==0&&strcmp(cd[count],s2)==0){ break; } } if(count==8) flagt=2; break; } } if(flagt==2) continue; if(strlen(cc[7])==0){ strcat(cc[7],ming); strcat(cd[7],s2); cf[7]=1; } else{ int flag=0; for(count=0;count<8;count++){ if(strcmp(cc[count],ming)==0&&strcmp(cd[count],s2)==0){ cf[count]=cf[count]+1; flag=1; break; } } if(flag==0){ for(count=0;count<7;count++){ strcpy(cc[count],cc[count+1]); strcpy(cd[count],cd[count+1]); cf[count]=cf[count+1]; } strcpy(cc[count],ming); strcpy(cd[count],s2); cf[count]=1; } } } int j=0; for(j=0;j<8;j++){ if(strlen(cc[j])!=0){ printf("%s %s %d\n",cc[j],cd[j],cf[j]); } } }