题解 | #简单错误记录#
简单错误记录
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;
}

