C语言如何统计包含3个以上相同字母的单词数量
你当前的代码仅统计了单词长度,没有记录每个单词内的字符出现频率,因此无法识别是否存在3个以上相同字母。
实现思路
- 为每个单词单独维护一个字符出现次数的统计数组,ASCII范围的字符可以直接用大小为256的int数组实现
- 读取单词字符时同步更新对应字符的计数,一旦有任意字符计数≥3就标记该单词符合要求
- 遇到单词分隔符(空格/句号)时,判断当前单词是否符合要求,符合则总计数+1,同时重置所有单词级别的临时变量
修改后可运行代码
#include <stdio.h> #include <stdlib.h> // 如果需要不区分大小写统计,引入下面的头文件 // #include <ctype.h> int main() { char c; // 总符合要求的单词数 int validWordCount = 0; printf("Enter a phrase that ends with a period:\n"); do { // 每个单词的临时变量,每次新单词开始时重置 int charCount[256] = {0}; // 统计每个ASCII字符出现次数 int hasThreeSame = 0; // 标记当前单词是否有≥3个相同字符 c = getchar(); // 读取完整一个单词 while (c != ' ' && c != '.') { // 不区分大小写的话放开下面这行注释 // c = tolower(c); charCount[(unsigned char)c]++; // 只要有一个字符达到3次就标记,后续不用重复判断 if (charCount[(unsigned char)c] == 3) { hasThreeSame = 1; } c = getchar(); } // 单词读取结束,判断是否符合要求 if (hasThreeSame) { validWordCount++; } } while (c != '.'); printf("%i \n", validWordCount); system("pause"); return 0; }
补充说明
该实现默认区分字符大小写,比如A和a会被判定为不同字符,如果需要忽略大小写,放开代码中注释的tolower相关代码即可。
内容的提问来源于stack exchange,提问作者Rostyk Zhuk
相关产品推荐
相关产品推荐

