如何用c语言实现单词统计

来源:图像处理网作者:辉辉头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何用c语言实现单词统计》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用c语言实现单词统计》有用,将其分享出去将是对创作者最好的鼓励。

用C语言实现单词统计,核心是通过遍历字符序列,识别单词的开始和结束边界,从而准确计数。单词通常由连续的字母或数字组成,被空格、标点符号、换行符等非单词字符分隔,我们需要设计合理的逻辑来捕捉这些边界变化。

如何用c语言实现单词统计

核心实现思路

单词统计的核心逻辑可以拆解为以下几个步骤:

  • 定义两个状态变量,一个表示当前是否处于单词内部,另一个用于记录单词总数
  • 逐个遍历输入的每一个字符,判断字符是否属于单词组成字符(字母或数字)
  • 当字符从非单词字符变为单词字符时,说明遇到了一个新单词,计数加一
  • 遍历结束后,得到的计数就是单词的总数量

基础版本:统计字符串中的单词

首先实现统计一个固定字符串中单词数量的功能,这里我们先处理只包含字母和空格的简单场景,后续再扩展适配更多分隔符。

#include <stdio.h>
#include <ctype.h>

// 判断字符是否为单词组成字符,这里先只考虑字母
int is_word_char(char c) {
    return isalpha(c);
}

// 统计字符串中的单词数量
int count_words(const char *str) {
    int word_count = 0;
    int in_word = 0; // 0表示不在单词内,1表示在单词内
    const char *p = str;

    while (*p != '') {
        if (is_word_char(*p)) {
            // 当前是单词字符,且之前不在单词内,说明遇到新单词
            if (!in_word) {
                word_count++;
                in_word = 1;
            }
        } else {
            // 当前是非单词字符,标记不在单词内
            in_word = 0;
        }
        p++;
    }
    return word_count;
}

int main() {
    char test_str[] = "Hello World This is a test string";
    int result = count_words(test_str);
    printf("字符串中的单词数量为:%dn", result);
    return 0;
}

上面的代码中,isalpha是C标准库中的函数,用来判断字符是否为字母,需要包含ctype.h头文件。运行这段代码会输出字符串中的单词数量为6,符合预期结果。

扩展版本:适配更多分隔符和文件统计

实际场景中,单词可能被逗号、句号、换行符等分隔,同时我们可能需要统计文件中的单词数量,下面扩展代码适配这些需求。

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

// 判断字符是否为单词组成字符,字母或数字都算
bool is_word_char(char c) {
    return isalnum(c);
}

// 统计文件中的单词数量
int count_file_words(const char *filename) {
    FILE *fp = fopen(filename, "r");
    if (fp == NULL) {
        printf("无法打开文件:%sn", filename);
        return -1;
    }

    int word_count = 0;
    bool in_word = false;
    int ch;

    while ((ch = fgetc(fp)) != EOF) {
        if (is_word_char(ch)) {
            if (!in_word) {
                word_count++;
                in_word = true;
            }
        } else {
            in_word = false;
        }
    }

    fclose(fp);
    return word_count;
}

int main() {
    // 统计当前目录下test.txt文件的单词数量,若文件不存在会提示错误
    int result = count_file_words("test.txt");
    if (result != -1) {
        printf("文件中的单词数量为:%dn", result);
    }
    return 0;
}

这个扩展版本中,我们用isalnum函数判断字符是否为字母或数字,适配了更多单词组成场景。同时用fgetc逐个读取文件字符,支持统计任意文本文件中的单词数量。如果文件中有换行符、标点符号,都会被正确识别为非单词字符,不会影响统计结果。

注意事项

  • 如果单词中包含下划线、连字符等特殊字符,需要修改is_word_char函数的判断逻辑,把这些字符也纳入单词组成范围
  • 处理文件时要注意文件路径的正确性,以及文件打开失败时的错误处理,避免程序异常崩溃
  • 如果需要统计每个单词的出现次数,可以在现有逻辑基础上增加哈希表或者数组来记录单词和对应的频次

C语言单词统计字符串处理文件操作修改时间:2026-07-08 05:27:21

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。