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

C++字符串元素与整数比较出错:如何统计字符串中0、1字符数量

问题根源与解决办法

嘿,这个问题其实是字符与整数的ASCII值混淆导致的,我来给你拆解清楚:

为什么你的代码不对?

你定义的liczba是string类型,它的每个元素都是char类型的字符。当你写liczba[i] == 0时,你是在拿字符的ASCII编码值和整数0比较——但字符'0'的ASCII码是48,'1'是49,和整数0、1完全不相等,自然统计不到任何结果。

哪怕你把整数0转成char,得到的是ASCII码为0的空字符(不是字符'0'),所以还是匹配不上。

两种可行的解决方法

方法1:直接和字符字面量比较

把比较的目标换成字符形式的'0'和'1',这才是字符串中存储的真实内容:

int zera = 0, jedynki = 0;
for (int i = 0; i < liczba.length(); i++) {
    if (liczba[i] == '0') zera ++;
    else if (liczba[i] == '1') jedynki ++;
}

方法2:把字符转换为对应整数

利用ASCII表中数字字符连续排列的特性,用字符减去'0'就能得到对应的整数值(比如'0' - '0' = 0,'1' - '0' = 1),再和整数比较:

int zera = 0, jedynki = 0;
for (int i = 0; i < liczba.length(); i++) {
    int digit = liczba[i] - '0';
    if (digit == 0) zera ++;
    else if (digit == 1) jedynki ++;
}

这种方法的好处是,如果之后要处理其他数字(比如2-9),逻辑会更统一。

额外提醒

如果你的字符串里可能包含非数字字符,建议先做个合法性检查,比如用<cctype>头文件里的isdigit()函数:

#include <cctype>
// ...
int zera = 0, jedynki = 0;
for (int i = 0; i < liczba.length(); i++) {
    if (isdigit(liczba[i])) { // 先判断是否是数字字符
        int digit = liczba[i] - '0';
        if (digit == 0) zera ++;
        else if (digit == 1) jedynki ++;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:20:37