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
相关产品推荐
相关产品推荐

