c语言实现统计一个英文的文本文件中出现次数最多的前十个单词及其出现次数
时间: 2023-11-28 21:46:21 浏览: 188
C:\Users\Administrator\Desktop\GetWords.txt
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORD_LEN 100 // 最大单词长度
#define TOP_N 10 // 前N个出现次数最多的单词
// 单词结构体
typedef struct {
char word[MAX_WORD_LEN]; // 单词
int count; // 出现次数
} Word;
// 比较函数,用于qsort排序
int cmp(const void *a, const void *b) {
return ((Word *)b)->count - ((Word *)a)->count;}
int main() {
char filename[100]; // 文件名
printf("请输入文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "r"); // 打开文件
if (fp == NULL) {
printf("文件打开失败!\n");
return 0;
}
Word *words = (Word *)malloc(sizeof(Word) * 1000); // 动态分配内存
int wordCount = 0; // 单词数量
char word[MAX_WORD_LEN]; // 临时存储单词
int len = 0; // 单词长度
char c; // 临时存储字符
while ((c = fgetc(fp)) != EOF) { // 逐个字符读取文件
if (isalpha(c)) { // 如果是字母
if (len < MAX_WORD_LEN - 1) { // 如果单词长度未超过最大长度
word[len++] = tolower(c); // 转换为小写字母并存储
}
} else if (len > 0) { // 如果不是字母且单词长度大于0
word[len] = '\0'; // 添加字符串结束符
int i;
for (i = 0; i < wordCount; i++) { // 查找单词是否已存在
if (strcmp(words[i].word, word) == 0) { // 如果已存在
words[i].count++; // 出现次数加1
break;
}
}
if (i == wordCount) { // 如果不存在
strcpy(words[wordCount].word, word); // 存储单词
words[wordCount].count = 1; // 出现次数为1
wordCount++; // 单词数量加1
}
len = 0; // 重置单词长度
}
}
fclose(fp); // 关闭文件
qsort(words, wordCount, sizeof(Word), cmp); // 按出现次数排序
printf("出现次数前%d的单词:\n", TOP_N);
int i;
for (i = 0; i < TOP_N && i < wordCount; i++) { // 输出前N个单词
printf("%s\t%d\n", words[i].word, words[i].count);
}
free(words); // 释放内存
return 0;
}
```
--相关问题--:
1. 如何统计一个中文文本文件中出现次数最多的前十个汉字
阅读全文