题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
#include <stdio.h> #include <string.h> struct cwjl{ char lj[100]; char name[17]; int hh; int time; }; int main() { struct cwjl t[100]; int n=0,i,b,j,k; while (scanf("%s %d",t[n].lj,&t[n].hh) != EOF) { t[n].time=1;memset(t[n].name,0,sizeof(t[n].name));//初始化次数以及名字 int num=0; while(t[n].lj[num]!=0) ++num;//计算路径字符长度 //找最后一个\符号 for(i=num;i>0;--i){ if(t[n].lj[i]==92) break; } b=num-i-1;//名称长度 if(b>16) j=num-16; else j=i+1; //把名称从路径lj给name储存 for(k=0;k+j<num;k++) t[n].name[k]=t[n].lj[k+j]; n++;//计算错误记录的总条数 } //去除重复的,重复的计数加一 for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(t[i].hh==t[j].hh&&strcmp(t[i].name,t[j].name)==0){ t[i].time++; for(k=j;k<n;k++) t[k]=t[k+1]; j--;n--; } //输出最后八条,如果错误记录比较少,就把全部的都输出 if(n>8) for(i=n-8;i<n;i++) printf("%s %d %d\n",t[i].name,t[i].hh,t[i].time); else for(i=0;i<n;i++) printf("%s %d %d\n",t[i].name,t[i].hh,t[i].time); return 0; }