c语言统计文本文件中单词频度
时间: 2023-10-23 11:13:39 浏览: 179
英文文本单词词频统计(C++实现)
5星 · 资源好评率100%
以下是一个简单的C语言程序,用于统计文本文件中单词的频度:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORD_LEN 50 // 最大单词长度
#define MAX_WORDS 10000 // 最大单词数
int main(int argc, char *argv[]) {
char filename[100]; // 文件名
char word[MAX_WORD_LEN + 1]; // 当前单词
char words[MAX_WORDS][MAX_WORD_LEN + 1]; // 所有单词
int freq[MAX_WORDS]; // 单词频度
int n = 0; // 单词数
int i, j, k; // 循环计数器
FILE *fp; // 文件指针
// 获取文件名
if (argc < 2) {
printf("请输入文件名:");
scanf("%s", filename);
} else {
strcpy(filename, argv[1]);
}
// 打开文件
fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件 %s\n", filename);
exit(1);
}
// 读取所有单词
while (fscanf(fp, "%s", word) == 1) {
// 将单词转换成小写
for (i = 0; word[i] != '\0'; i++) {
word[i] = tolower(word[i]);
}
// 检查单词是否已经出现过
for (i = 0; i < n; i++) {
if (strcmp(words[i], word) == 0) {
freq[i]++;
break;
}
}
// 如果单词是新出现的,则加入单词列表
if (i == n) {
strcpy(words[n], word);
freq[n] = 1;
n++;
}
}
// 关闭文件
fclose(fp);
// 输出所有单词及其频度
for (i = 0; i < n; i++) {
printf("%s:%d\n", words[i], freq[i]);
}
return 0;
}
```
该程序的基本思路是:
1. 打开文件;
2. 逐个读取文件中的单词,并将其转换成小写形式;
3. 检查该单词是否已经出现过,如果是则增加其频度,否则将其加入单词列表;
4. 关闭文件;
5. 输出所有单词及其频度。
需要注意的是,该程序假设单词之间用空格或换行符分隔,并且不考虑标点符号对单词的影响。如果需要更精确地统计单词,需要对程序进行一定的修改。
阅读全文