以下是我提交的源代码(题目是华为2016校园招聘上机笔试题第二题)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CNT 8
typedef struct
{
char file_name[20];
int rank; //记录出现的顺序
int cnt;
}ERROR_FILE;
ERROR_FILE error_file[10]; //这里不定义数组的数量会有问题么?
void Swap(ERROR_FILE *a, ERROR_FILE *b)
{
ERROR_FILE temp = *a;
*a = *b;
*b = temp;
}
void delete_repeat(char *temp,int *index)
{
int i,flag = 0;
for(i = 0;i < (*index);i++)
{
if(strcmp(temp,error_file[i].file_name) == 0)
{
error_file[i].cnt++;
flag = 1;
break;
}
}
if(flag == 0)
{
strcpy(error_file[*index].file_name,temp);
error_file[*index].cnt++;
error_file[*index].rank = *index;
(*index)++;
}
}
void sort_error_file(int num)
{
int i,j;
for(i = 0;i < num;i++)
{
for(j = 1;j < num - i;j++)
{
if(error_file[j - 1].cnt < error_file[j].cnt)
{
Swap(&error_file[j - 1],&error_file[j]);
}
else if(error_file[j - 1].cnt == error_file[j].cnt)
{
if(error_file[j - 1].rank > error_file[j].rank)
{
Swap(&error_file[j - 1],&error_file[j]);
}
}
}
}
}
int main()
{
int len,i,j,x,num = 0;
char* s = (char *)malloc(sizeof(char));
char* temp_reslut = (char *)malloc(sizeof(char));
while(gets(s))
{
len = strlen(s);
if(len <= 0)
break;
i = len - 1;
while(s[i] != 92) //反斜杠对应的ascii码
i--;
strcpy(temp_reslut,&s[i+1]);
delete_repeat(temp_reslut,&num);
}
sort_error_file(num);
x = num > MAX_CNT ? MAX_CNT : num;
for(j = 0;j < x;j++)
{
if(j < x - 1)
{
printf("%s %d ",error_file[j].file_name,error_file[j].cnt);
}
else
{
printf("%s %d",error_file[j].file_name,error_file[j].cnt);
}
}
return 0;
}