【发布时间】:2021-01-23 14:52:57
【问题描述】:
这是我的任务:
编写一个程序,要求用户输入文件名。程序以二进制模式打开文件并计算所有字符的频率 [0-255] 并打印出十个最常见字符及其频率的列表。
这是我已经写的大部分代码:
#pragma warning(disable: 4996)
#include <stdio.h>
int count[26];
int main() {
FILE *f;
int i;
char ch;
char filename[80];
printf("Enter File name\n");
gets(filename);
f = fopen("file.txt", "rb");
while (!feof(f)) {
ch = fgetc(f);
count[ch - 'a']++;
}
for (i = 0; i < 26; i++)
printf("[%c] = %d times\n", 65 + i, count[i]);
fclose(f);
return 0;
}
我能够计算和打印所有字符的频率。如何只打印最频繁的十个?
【问题讨论】:
-
顺便说一下,您对
while (!feof(f))的使用是wrong,它将导致我们对数组count的范围访问。您应该使用“读取”的内容之前检查读取是否成功。 -
1.创建一个具有字符和频率的结构数组 2. 根据频率降序对数组进行排序 3. 打印数组的前 10 个元素
-
如果数据不在
'a'到'z'范围内,您将破坏数组。而且很可能'\n'比'j'更频繁。
标签: c