题解 | #简单错误记录#

简单错误记录

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;
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务