如何在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
相关产品推荐
相关产品推荐

