如何利用文件扫描进行排行输出c语言
时间: 2024-02-27 20:56:36 浏览: 43
源程序的输入和扫描(C语言版)
4星 · 用户满意度95%
可以按照以下步骤进行排行输出:
1. 读取文件中的每一行数据并保存到数组中。
2. 对数组进行排序,可以使用快速排序或归并排序等常见排序算法。
3. 统计每个数据项出现的次数,并将其保存到另一个数组中。
4. 根据出现次数对数据项进行排序,可以使用桶排序或计数排序等常见排序算法。
5. 将排序后的数据项和对应的出现次数输出,即可得到排行榜。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 256
#define MAX_ITEMS 1000
typedef struct {
char* value;
int count;
} Item;
int compare_items(const void* a, const void* b) {
Item* item_a = (Item*)a;
Item* item_b = (Item*)b;
return item_b->count - item_a->count;
}
int main(int argc, char* argv[]) {
if (argc < 2) {
printf("Usage: %s <filename>\n", argv[0]);
return 1;
}
FILE* fp = fopen(argv[1], "r");
if (!fp) {
printf("Failed to open file: %s\n", argv[1]);
return 1;
}
char buffer[MAX_LINE_LENGTH];
Item items[MAX_ITEMS];
int item_count = 0;
while (fgets(buffer, MAX_LINE_LENGTH, fp)) {
buffer[strcspn(buffer, "\r\n")] = '\0'; // remove trailing newline
int found = 0;
for (int i = 0; i < item_count; i++) {
if (strcmp(items[i].value, buffer) == 0) {
items[i].count++;
found = 1;
break;
}
}
if (!found) {
items[item_count].value = strdup(buffer);
items[item_count].count = 1;
item_count++;
}
}
qsort(items, item_count, sizeof(Item), compare_items);
for (int i = 0; i < item_count; i++) {
printf("%s: %d\n", items[i].value, items[i].count);
}
fclose(fp);
return 0;
}
```
该程序从命令行参数中读取文件名,读取文件中的每一行数据并统计出现次数,最后按照出现次数进行排序并输出排行榜。注意需要动态分配内存并在程序结束时释放。
阅读全文