C/C++编程题之简单错误记录

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


在牛客上刷到简单错误记录题目,现在将通过的代码贴一下,供大家参考

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

 

处理:

 

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

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

3、 输入的文件可能带路径,记录文件名称不能带路径。

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

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

typedef struct s_errlog
{
char filename[50];
int errline;
int errcount;
} errlog;
typedef struct s_errnode
{
errlog * log;
struct s_errnode * next;
struct s_errnode * prev;
}errnode;

void dealerrlog(errnode * errlist,errnode * tail, char *filename,int errline)
{
errnode * ptempnode = errlist->next;
//printf("3\n");
while(ptempnode)
{
//printf("4\n");
errlog * ptemplog = ptempnode->log;
if(ptemplog!=NULL)
{
//printf("5 %s\n",ptemplog->filename);
if((strcmp(ptemplog->filename,filename)==0) && ptemplog->errline==errline)
{
ptemplog->errcount++;
return ;
}
}
ptempnode=ptempnode->next;
}
//printf("6\n");
int count = 0;
if(ptempnode==NULL)
{

ptempnode = errlist;
errnode * head = errlist->next;
while(ptempnode->next!=NULL)
{
ptempnode=ptempnode->next;
count++;
}

errnode * newnode = (errnode *)malloc(sizeof(errnode));
errlog * newlog = (errlog *)malloc(sizeof(errlog));
strcpy(newlog->filename,filename);
newlog->errline = errline;
newlog->errcount = 1;
newnode->log = newlog;
newnode->next = NULL;
ptempnode->next = newnode;
newnode->prev = ptempnode;
tail = newnode;
//printf("7 %s\n",filename);
//if(count>=8)
//{
// errnode * pdelnode = head->next;
// errlist->next = head->next;
// free(head->log);
// free(head);
// head=NULL;
//}
//printf("4 %s\n",filename);
return;
}

};
int main()
{
char inputfile[100]={0};
int inputline;
errnode * errlist= (errnode *)malloc(sizeof(errnode));
errlist->next = NULL;
errlist->log = NULL;
errlist->prev = NULL;
errnode * ptail = errlist;
while(scanf("%s %d",inputfile,&inputline)!=EOF)
{
//printf("inputfile = %s\n",inputfile);
char * p = strrchr(inputfile,'\\');
p++;
if(strlen(p)>16)
p += strlen(p)-16;
//printf("1-%s\n",p);
char filename[50]={0};
strcpy(filename,p);
//printf("1-%s dd",filename);
dealerrlog(errlist,ptail,filename,inputline);
}
errnode * pnexterrnode = errlist->next;
//errnode * ppreverrnode = ptail;
int count = 0;
while(pnexterrnode!=NULL)
{
//printf("aaa");
errlog * ptemplog = pnexterrnode->log;
if(ptemplog!=NULL)
{
// printf("%s %d %d\n",ptemplog->filename,ptemplog->errline,ptemplog->errcount);
count ++;
}
pnexterrnode = pnexterrnode->next;
}
if(count > 0)
{
errlog clog[count];
int i = 0;
pnexterrnode = errlist->next;
while(pnexterrnode!=NULL)
{
errlog * ptemplog = pnexterrnode->log;
if(ptemplog!=NULL)
{
//memset(clog[i].filename,0,50);
strcpy(clog[i].filename,ptemplog->filename);
//printf("%s \n",clog[i].filename,ptemplog->filename);
clog[i].errline = ptemplog->errline;
clog[i].errcount = ptemplog->errcount;
i++;
}
pnexterrnode = pnexterrnode->next;
}
int j = 0;
if(count>8)
j = count - 8;
for(;j<count;j++)
{
printf("%s %d %d\n",clog[j].filename,clog[j].errline,clog[j].errcount);
}
}
return 0;
}

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++

“C/C++编程题之简单错误记录” 的相关文章