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

C++二维char数组转一维方法及矩阵左右对角线元素相等判断

问题原因解析

  • 最初check函数报错的原因:你的判断完全正确,最初版本里left、right被定义为二维数组,left[dimL++]指向的是二维数组的一整行,属于不可修改的数组首地址,你将单个char类型的矩阵元素赋值给它,自然触发“需要可修改左值”的报错,将两个对角线存储数组改为一维的解决方案是完全可行的。
  • 主函数无法访问left/right的原因:这两个数组是check函数内部的局部变量,作用域仅局限在check函数内部,函数执行结束后对应内存就会被系统回收,主函数根本无法识别这两个变量,强行调用必然报错。另外你写的打印代码本身有语法错误,错把循环关键字for写成了if。
  • 额外隐患:你最初主函数里重复调用了两次check函数,会重复执行对角线提取、比对逻辑,造成不必要的性能浪费;同时主函数里用局部变量n定义变长数组char a[n][n]不属于标准C++支持的语法,属于编译器扩展特性,兼容性较差。

完整修复方案

将left、right数组改为在主函数中定义,通过参数传入check函数,即可在主函数中直接访问两个对角线的内容,同时统一用固定最大尺寸常量定义数组,兼容性更强:

#include <iostream>
using namespace std;
const int MAX_SIZE = 100; // 统一矩阵最大尺寸

bool check(char a[MAX_SIZE][MAX_SIZE], int n, char left[], char right[], int &dimL, int &dimR ){
    dimL = 0; // 调用前重置计数,避免多次调用时计数错误
    dimR = 0;
    for( int i = 0; i < n; i++ ){
        for( int j = 0; j < n; j++ ){
            if( i == j ){
                left[dimL++] = a[i][j];
            }
            if( i + j == n - 1 ){
                right[dimR++] = a[i][j];
            }
        }
    }
    for( int i = 0; i < n; i++ ){
        if( left[i] != right[i] )
            return false;
    }
    return true;
}

int main(){
    int n;
    char a[MAX_SIZE][MAX_SIZE];
    char left[MAX_SIZE], right[MAX_SIZE]; // 主函数内定义对角线存储数组
    int dimL = 0;
    int dimR = 0;

    cout << "Input the dimension of the matrix: ";
    cin >> n;

    for( int i = 0; i < n; i++ )
        for( int j = 0; j < n; j++ ){
            cin >> a[i][j];
        }

    cout << "Matrix A is: " << endl;
    for( int i = 0; i < n; i++ ){
        for( int j = 0; j < n; j++ ){
            cout << a[i][j] << " ";
        }
        cout << endl;
    }

    bool res = check(a,n,left,right,dimL,dimR);
    // 打印两个对角线元素
    cout << "Left diagonal elements: ";
    for(int i = 0; i < dimL; i++ ){
        cout << left[i] << " ";
    }
    cout << endl << "Right diagonal elements: ";
    for(int i = 0; i < dimR; i++ ){
        cout << right[i] << " ";
    }
    cout << endl;

    if(res){
        cout << "YES";
    }
    else {
        cout << "NO";
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:54:02