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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:55:18