C ++,将1D阵列转换为2D阵列

时间:2017-12-11 00:40:12

标签: c++ arrays

我需要转换当前使用两个函数的代码来创建一个字符2D数组到一个创建字符2D数组的函数。

数组的内容是从'A'到'Y'的字母表(省略'Z',因为我需要一个5 * 5大小的矩阵)。注意:我不能使用向量或指针。

以下代码有效,但需要将其转换为一个函数,我在这方面遇到了相当大的麻烦。我一直在研究,但我找不到足够清晰的解决方案,而且我是C ++的初学者。

// Fills 4-Square Matrix 1 with Alphabet (1D Array)
void fill4Square1(char* FourSquare_1_Matrix)
{
    int n;
    for (n = 0; n < 25; n++)
        FourSquare_1_Matrix[n] = 'A' + n;
}
// Fills 4-Square Matrix 1 with Alphabet (2D Array)
void fill4Square1_1()
{
    char FourSquare_1_Matrix[5][5];
    fill4Square1((char*)FourSquare_1_Matrix); //Function Call for 1D Array
    for (int row = 0; row < 5; row++) //For Loop puts 1D array into 2D Array
    {
        for (int col = 0; col < 5; col++)
            cout << FourSquare_1_Matrix[row][col] << " ";
        cout << "\n";
    }
}

我写了下面的代码,但是我无法将1D数组的内容放到2D数组中。 2D数组正在填充随机字符。 Program OUTPUT

void PlayFairMatrix1()
{
    int i = 0;
    char Matrix[25] = { {0} };
    char PlayFairMatrix[5][5] = { {0} };
    int n;

    //1D Matrix
    for (i = 0; i < 25; i++)
    {
        Matrix[i] = 'A' + i;
        cout << Matrix[i];
    }
    cout << "\n";   
    cout << " " << endl;

    ////2D Matrix
    for (int row = 0; row < 5; row++)
    {
        for (int col = 0; col < 5; col++)
        {
            PlayFairMatrix[row][col] = Matrix[i];
                i++;
        }
        cout << PlayFairMatrix << " ";
        cout << "\n";
    }
    cout << " " << endl;

}

任何人都可以帮我指点正确的方向吗?

2 个答案:

答案 0 :(得分:0)

问题出在这一行PlayFairMatrix[row][col] = Matrix[i];

i以前一循环中的值25开始。而你永远不会将它重置为0。

因此,解决它的最简单方法是在第二个循环之前添加i = 0;

另一种方法是使用row和col访问Matrix,但我会将此作为练习留给您。

此外,当您打印PlayFairMatrix时,您没有使用索引访问它,因此您将打印指针。您应该将cout << PlayFairMatrix << " ";放入内部循环并添加索引,因此它变为cout << PlayFairMatrix[row][col] << " ";

答案 1 :(得分:0)

在填充PlayFairMatrix时,您忘记重新初始化变量module。这将修复您的代码。

但你可以简单地完成以下工作

i = 0