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

C++数组索引累加异常求助:无法正确统计数字出现次数

问题原因分析

你的代码出现异常结果主要有两个核心问题:

  • 数组未初始化
    在C++中,局部声明的数组(比如你代码里的arr[3])不会自动初始化为0,里面会存储内存里的随机垃圾值。当你执行arr[0] +=1这类操作时,是在这些随机值的基础上累加,自然会得到像-13008这种毫无意义的数值。

  • 字符与整数的比较错误
    字符串s中的每个元素是char类型,比如输入的'1'对应的ASCII码是49,而不是整数1。你用s[i] == 1做判断时,永远不会成立,同理s[i] ==2也不成立,所有数字都会进入else分支去累加arr[2],这就解释了为什么示例输入里arr[2]是5(刚好是输入里数字的总个数),而其他两个元素保留了初始垃圾值。

修正后的代码示例
#include <iostream>
using namespace std;

int main(){

    string s;
    int arr[3] = {0}; // 初始化数组所有元素为0

    cin >> s;

    for(int i=0; i<s.size(); i+= 2){
        if(s[i] == '1'){ // 用字符'1'而非整数1比较
            arr[0] += 1;
        }
        else if(s[i] == '2'){ // 同理用字符'2'
            arr[1] += 1;
        }
        else if(s[i] == '3'){ // 明确判断'3',避免else覆盖其他情况
            arr[2] += 1;
        }
    }
    // 后续输出逻辑示例
    for(int num : arr){
        cout << num << " ";
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:10:22