You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中获取用户输入文本并统计指定单词出现次数?

嘿,这个需求很常见,我来给你捋清楚怎么用C语言实现!咱们一步步来,从输入处理到单词统计,给你完整的代码和细节解释。

实现思路拆解
  • 安全获取用户输入:用fgets是个好选择,它能避免缓冲区溢出问题,但要记得处理它读取到的换行符。
  • 精准匹配目标单词:默认做严格大小写匹配(比如区分Hello和hello),也会给你提一下忽略大小写的方案。
  • 分割并遍历单词:可以用strtok函数把输入文本按空白字符拆分成独立单词,再逐个和目标单词对比计数。
完整代码示例
#include <stdio.h>
#include <string.h>

int main() {
    // 定义输入缓冲区,假设最多接受1000个字符(留1位存终止符)
    char input_text[1001];
    // 要统计的目标单词
    const char target_word[] = "Hello";
    int count = 0;

    // 提示用户输入文本
    printf("请输入一段文本:");
    // 使用fgets读取输入,同时检查读取是否成功
    if (fgets(input_text, sizeof(input_text), stdin) == NULL) {
        printf("获取输入失败,请重试!\n");
        return 1;
    }

    // 处理fgets自带的换行符:如果最后一个字符是换行,替换成字符串终止符
    size_t input_len = strlen(input_text);
    if (input_len > 0 && input_text[input_len - 1] == '\n') {
        input_text[input_len - 1] = '\0';
    }

    // 用strtok分割字符串,分隔符包含空格、制表符、换行、回车等空白字符
    char *current_word = strtok(input_text, " \t\n\r");
    while (current_word != NULL) {
        // 对比当前单词和目标单词,相等则计数+1
        if (strcmp(current_word, target_word) == 0) {
            count++;
        }
        // 获取下一个单词
        current_word = strtok(NULL, " \t\n\r");
    }

    // 输出最终统计结果
    printf("%s used %d times\n", target_word, count);

    return 0;
}
关键细节解释
  • 输入处理:fgets会把用户输入的回车符也读进缓冲区,所以我们要把它替换成\0,避免后续分割单词时出现奇怪的问题。
  • 单词分割:strtok第一次调用时传入原始字符串,后续调用传入NULL就能继续分割剩余内容,分隔符设置为常见的空白字符,确保能正确拆分单词。
  • 大小写匹配扩展:如果需要忽略大小写统计(比如把hello和Hello算同一个),可以把strcmp换成strcasecmp(POSIX系统)或_stricmp(Windows系统),这两个函数会忽略大小写对比字符串。
测试示例

程序启动后提示请输入一段文本:,用户输入Hello World Hello,程序会输出Hello used 2 times,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Anil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:07:37