题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
#include <stdio.h> #include <string.h> int main(void) { int i=0, j; int n; int x,y; int num [100]; //错误出现次数计数,相同仅最早一个有效 for(i=0;i<100;i++) { num [i]=0; } i=0; int l [100]; //接收行数信息 char arr [100][17]; //接收文件名信息 for(x=0;x<100;x++) //初始化为'\'字符 { for(y=0;y<16;y++) { arr[x][y]='\\'; } arr[x][16]='\0'; //文件名末尾增加结束位 } char tmp [100]; while (scanf("%s",tmp)!=EOF) //接收文件名 { scanf("%d",&l[i]); //接受行数 num [i]=1; //出现次数计数 n=strlen(tmp); //当前输入文件名字符串长度 for(j=0;j<16;j++) //只接受后16个字符 { if(tmp[n-1-j]=='\\') //转义字符'\' { break; } else { arr[i][15-j]=tmp[n-1-j]; //当前接收文件名写入二维数组 } } i++; n=0; //置零 } for(x=1;x<i;x++) { for(y=0;y<x;y++) { if(strcmp(arr[x], arr[y])==0&&l[x]==l[y]&&num[y]!=0) //比较文件名后16位及行数 { //检查是否已经清零排除两个以上重复可能性 num[x]=0; //本行计数清零 num[y]++; //之前计数加一 } } } //printf("%d,%d,%d\n",i,x,y); for(x=i-1,j=0;(x>-1&&j<8) ;x--) //从后向前计数,x=0时不可能为0 { if(num[x]!=0) { j++; } } for(j=x+1;j<i;j++) //要输出的第一条 x+1 { if(num[j]!=0) { for(y=0;y<16;y++) { if(arr[j][y]!='\\') { printf("%c",arr[j][y]); } } printf(" %d %d\n",l[j],num[j]); } } return 0; }