C语言实现文本文件单词统计
下面是一个完整的C语言程序,用于统计文本文件中的单词数量,这个程序会读取用户指定的文本文件,并统计其中的单词总数。

(图片来源网络,侵删)
代码实现
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#define MAX_FILENAME 256
// 判断字符是否为单词分隔符
bool is_word_separator(char c) {
return isspace(c) || ispunct(c);
}
int count_words_in_file(const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("无法打开文件");
return -1;
}
int word_count = 0;
bool in_word = false;
int c;
while ((c = fgetc(file)) != EOF) {
if (is_word_separator(c)) {
if (in_word) {
word_count++;
in_word = false;
}
} else {
in_word = true;
}
}
// 处理文件末尾可能未计数的单词
if (in_word) {
word_count++;
}
fclose(file);
return word_count;
}
int main() {
char filename[MAX_FILENAME];
printf("请输入要统计的文本文件名: ");
if (fgets(filename, MAX_FILENAME, stdin) == NULL) {
printf("读取输入失败\n");
return 1;
}
// 去除换行符
size_t len = strlen(filename);
if (len > 0 && filename[len-1] == '\n') {
filename[len-1] = '\0';
}
int word_count = count_words_in_file(filename);
if (word_count >= 0) {
printf("文件 \"%s\" 中的单词数量: %d\n", filename, word_count);
}
return 0;
}
代码说明
-
is_word_separator函数:
- 使用
isspace()和ispunct()函数判断字符是否为单词分隔符(空格、标点符号等)
- 使用
-
count_words_in_file函数:
- 打开并读取指定文件
- 使用状态机方法跟踪是否在单词中
- 遇到分隔符时结束当前单词计数
- 处理文件末尾可能未计数的单词
-
main函数:
- 获取用户输入的文件名
- 调用统计函数并输出结果
使用方法
- 将代码保存为
word_count.c - 编译:
gcc word_count.c -o word_count - 运行:
./word_count - 输入要统计的文本文件名
示例
假设有一个文本文件example.txt内容如下:

(图片来源网络,侵删)
Hello, world! This is a test file.
It contains multiple words.
运行程序并输入文件名后,输出将是:
文件 "example.txt" 中的单词数量: 10
扩展功能
如果需要更复杂的统计功能,可以考虑:
- 统计每个单词出现的频率
- 统计不同单词的数量
- 忽略大小写
- 过滤特定单词
需要这些功能时,可以修改代码或添加辅助函数来实现。

(图片来源网络,侵删)
