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

C语言如何统计二维char数组中指定字符的出现次数

问题分析与修正方案

原代码核心错误点

  • 循环边界错误:i<=ROWS、j<=COLS会导致数组下标越界,C语言数组下标从0开始,最大有效值为ROWS-1、COLS-1,应该用<而非<=
  • 数组访问逻辑错误:判断条件中写的是d[ROWS][COLS],属于固定访问越界地址,没有遍历到每个数组元素,正确写法为d[i][j]
  • 类型匹配错误:数组中存储的是整数2,不是字符'2'(ASCII码为50),二者值不相等,无法正确匹配
  • 代码执行顺序错误:printf语句放在return之后,永远不会被执行
  • 函数参数设计不合理:i、j是循环变量,res是统计结果,不需要作为入参传入,同时缺少指定统计目标值的入参,灵活性差
  • 未定义宏常量:ROWS、COLS使用前需要先定义,否则编译器无法识别

修正后完整代码

#include <stdio.h>
// 定义数组维度
#define ROWS 8
#define COLS 8

char d[ROWS][COLS] = {
        {0, 2, 0, 2, 0, 2, 0, 2},
        {2, 0, 2, 0, 2, 0, 2, 0},
        {0, 2, 0, 2, 0, 2, 0, 2},
        {1, 0, 1, 0, 1, 0, 1, 0},
        {0, 1, 0, 1, 0, 1, 0, 1},
        {3, 0, 3, 0, 3, 0, 3, 0},
        {0, 3, 0, 3, 0, 3, 0, 3},
        {3, 0, 3, 0, 3, 0, 3, 0}};

// 参数说明:d为目标数组,target为要统计的数值
int countOccurrences(char d[ROWS][COLS], int target)
{
    int res = 0;
    for (int i=0; i<ROWS; i++){
        for(int j=0; j<COLS; j++){
            if (target == d[i][j])
                res++;
        }
    }      
    printf("score: %d\n", res);
    return res;
}

// 测试用主函数
int main() {
    // 示例:统计数值2的出现次数
    countOccurrences(d, 2);
    return 0;
}

修正说明

  • 新增了ROWS、COLS宏定义,值为8匹配你的8*8数组
  • 优化了函数参数,仅保留数组和要统计的目标值两个入参,循环变量、统计结果改为函数内局部变量
  • 修正了循环边界和数组访问逻辑,正确遍历每个数组元素
  • 调整了printf和return的顺序,保证统计结果可以正常打印
  • 支持自定义统计目标值,传入不同数值即可统计对应值的出现次数,示例中统计2的次数运行结果为12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:03