创建2D字符矩阵的问题

时间:2019-05-16 14:50:29

标签: c++ char

我一直在尝试许多不同的方法来根据文本文件输入的数据创建2D矩阵。但是,我尝试的每种方式都会遇到错误。下面代码中的方法是错误最少的方法,但是仍然在返回对象上收到错误消息,指出我正在使用未初始化的内存“矩阵”。抱歉,如果这是一个简单的修复程序,那么我对C ++还是陌生的。

我以前曾尝试过向量的向量,但是遇到了尺寸错误的问题。如果有人有更好的方法从文本文件创建字符矩阵,请告诉我!

char** GetMap(int& M, int& N) //function to get the map of a room
{

    int M = 0; // initializing rows variable
    int N = 0; // initializing columns variable
    char** matrix; //give a matrix

    cin >> M >> N;

    for (int rows = 0; rows < M; rows++)
    {
        for (int cols = 0; cols < N; cols++)
        {
            cin >> matrix[rows][cols];
        }
    }

    return matrix;
}

1 个答案:

答案 0 :(得分:3)

首先让我告诉您,您要在M输入中请求Nstd::cin,但是您已经将它们作为函数char** GetMap(int& M, int& N)的参数了。 / p>

现在,您可能需要使用std::vector。实际上,您想使用两个变量M和N初始化char** matrix,这在适当的C ++中是不允许的。

解决此问题的一种好方法是使用std::vector<std::vector<char>> matrix而不是char** matrix。这是一个可以满足您期望的解决方案

std::vector<std::vector<char>> GetMap(int& M, int& N) //function to get the map of a room
{
    std::vector<std::vector<char>> matrix{}; //give a matrix
    char char_buf;

    for (int rows = 0; rows < M; rows++)
    {
        matrix.push_back(std::vector<char>()); //Put a new empty row in your matrix
        for (int cols = 0; cols < N; cols++)
        {
            std::cin >> char_buf; //Here you get a char from std::cin
            matrix.back().push_back(char_buf); //That you push back in your sub-vector
        }
    }

    return matrix;
}