📅  最后修改于: 2023-12-03 14:59:38.621000             🧑  作者: Mango
本题要求编写一个程序,从文件中读取一段文本,统计其中各个字符出现的次数,并按照字符出现的频率从高到低输出字符及其出现次数。
fgets
函数按行读取。for
循环和数组进行实现。#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 1000
void bubbleSort(char* ch, int* num, int len) { // 冒泡排序函数
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (num[j] < num[j + 1]) {
int temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
char ch_temp = ch[j];
ch[j] = ch[j + 1];
ch[j + 1] = ch_temp;
}
}
}
}
int main() {
FILE* fp = fopen("test.txt", "r"); // 打开文件
if (fp == NULL) {
printf("打开文件失败!");
return -1;
}
char buffer[MAX_LENGTH];
int count[128] = {0}; // 记录每个字符出现次数的数组
while (fgets(buffer, MAX_LENGTH, fp) != NULL) { // 按行读取文本
for (int i = 0; i < strlen(buffer); i++) {
count[buffer[i]]++; // 统计字符出现次数
}
}
char ch[128]; // 记录每个字符的数组
int num[128]; // 记录每个字符出现次数的数组
int len = 0;
for (int i = 0; i < 128; i++) {
if (count[i] > 0) { // 如果字符出现过
ch[len] = i;
num[len] = count[i];
len++;
}
}
bubbleSort(ch, num, len); // 对字符按照出现次数从高到低排序
printf("字符\t出现次数\n");
for (int i = 0; i < len; i++) {
printf("%c\t%d\n", ch[i], num[i]); // 输出字符及其出现次数
}
fclose(fp); // 关闭文件
return 0;
}
字符 出现次数
95
e 26
o 17
t 16
a 11
n 11
s 9
i 8
h 8
r 8
l 6
p 6
u 6
c 5
g 4
m 4
y 4
f 4
d 4
b 2
j 2
? 2
v 2
w 2
, 1
. 1
k 1
x 1
z 1
q 1
! 1
- 1