C++新手求助:如何正确统计字符串中的辅音字母?
问题分析与修复方案
你的代码核心问题是没有过滤非英文字母字符:只要字符不是元音(A/E/I/O/U及大小写),不管是空格、数字、标点还是其他符号,都会被统计成辅音,这完全不符合“统计辅音字母”的需求。
关于你提到的“每次结果不一致”:如果排除输入字符串本身不同的情况,检查调用函数时是否传入了未正确初始化的字符串;但从当前函数代码看,每次调用都会将cons初始化为0,所以大概率是输入内容变化导致,不过函数逻辑的错误会让所有统计结果都偏离预期。
修复后的代码
#include <cctype> // 必须包含此头文件以使用isalpha函数 int Countconsonants(string arg) { int cons = 0; // 范围for循环遍历字符串,写法更简洁 for (char c : arg) { // 先判断是否为英文字母,再排除元音字母 if (isalpha(c) && !(c == 'A' || c == 'a' || c == 'E' || c == 'e' || c == 'I' || c == 'i' || c == 'O' || c == 'o' || c == 'U' || c == 'u')) { cons++; } } return cons; }
关键说明
isalpha(c):判断字符是否为英文字母,自动兼容大小写判断- 用
!(...)对元音判断逻辑取反,比原代码中多个&& !=的写法更简洁易读 - 如果需要保留原代码的反向遍历逻辑,只需将
for (char c : arg)替换为for (int i = arg.length() - 1; i >= 0; i--),并把c替换为arg[i]即可
内容的提问来源于stack exchange,提问作者AS18
相关产品推荐
相关产品推荐

