#include <stdio.h> #include <string.h> char* getFilename(const char *path) { int len = strlen(path); for(int i = len; i > 0; i--) { if(path[i] == '\\') { return (char*)(path + i + 1); break; } } return (char*)path; } int main() { char record[101]; int linenumber; char recordname[100][17]; int recordinfo[100][2]; int count = 0; while (scanf("%s %d", record, &linenumber) != EOF) { char *filename = getFilename(record); //printf("filename is %s\n", filename); int len = strlen(filename); char newfilename[17]; if (len > 16) { strncpy(newfilename, filename + len - 16, 16); newfilename[16] = '\0'; } else { strcpy(newfilename, filename); } int findsame = 0; for(int i = 0; i < count; i++){ if((strcmp(recordname[i], newfilename) == 0) && (recordinfo[i][0] == linenumber)){ recordinfo[i][1]++; // printf("when file name is %s, the i is %d\n", recordname[i], i); // printf("the new filename is %s", newfilename); // printf("find same error.\n"); findsame = 1; break; } } if(findsame == 0){ strcpy(recordname[count], newfilename); recordinfo[count][0] = linenumber; recordinfo[count++][1] = 1; } } if(count > 8) { for(int i = count - 8; i < count; i++){ printf("%s %d %d\n", recordname[i], recordinfo[i][0], recordinfo[i][1]); } } else { for(int i = 0; i < count; i++) { printf("%s %d %d\n", recordname[i], recordinfo[i][0], recordinfo[i][1]); } } return 0; }