【问题标题】:How to put the values of a 1D array into a 2D array in C++ using for loop如何使用 for 循环将一维数组的值放入 C++ 中的二维数组
【发布时间】:2017-07-22 17:53:25
【问题描述】:

我想将一维数组的值放入二维数组。然后我想打印出二维数组的值。

我有以下代码:

#include <string.h>
#include <fstream>
#include <iostream>
#include <conio.h>          //for _kbhit
using namespace std;
#define MAX_N 100

#include<stdio.h>

int c[MAX_N] = {35, 23 , 56 , 30, 110 , 123 , 13 , 31 };

int b[4][4];
int main()
{

    int i,j,k,l;
    for(i=0;i<8;i++)
    { cout << c[i];}
    cout << endl;

    for(i=0;i<4;i++)
    {   for(j=0;j<4;j++)
         {
          b[i][j] = c[i];
         }
    }
    for(i=0;i<4;i++)
        {
            for(j=0;j<4;j++)
                {
                    cout << b[i][j] << " ";
                }
        cout << "\n";   
        cout << "\n";
        }
cout << "\n\nHit<enter> to finish";
while ( !_kbhit());
return (0);
}

输出应该是:

35 23 56 30
110 123 13 31 

有什么想法吗?

谢谢!

【问题讨论】:

  • 我会先做一些数学。您的输出循环总共有 16 次写入。如果您期望只有 8 个 项,那么您的数学显然是错误的。
  • b[i][j] = c[i]; 很明显,对于任何x,所有b[i][x] 都将具有相同的值。

标签: c++ arrays loops for-loop


【解决方案1】:

设原数组为

int arr[] = {10, 20, 30, 40, 50, 60};

您可以选择所需的行数,以便可以将数组相应地分成二维。

int row;
cout << "Enter Number of rows: ";
cin >> row;

然后通过计算列数来初始化你的二维数组

int size = sizeof(arr)/sizeof(int);
int col = (int) ceil(size/row); // from math.h/cmath library
int array[row][col];

现在迭代并使用一维数组填充二维数组

int idx = 0;
for(int i=0; i<row; i++)
    for(int j=0; j<col && idx<size; j++) 
        array[i][j] = arr[idx++]; 

试运行

arr = [10, 20, 30, 40, 50, 60]

Enter Number of rows = 2

array = {{10, 20, 30},
         {40, 50, 60}}

编辑:idx&lt;size 在用一维数组填充二维数组的内部嵌套循环中。这样您就可以处理奇数大小的一维数组。

【讨论】:

  • 所以,显然这可行,谢谢!我必须添加: int idx = 0;你能详细说明一下吗?那是如何工作的?任何 cmets 都会很有用。
  • Np 只是试着在副本上画出你的问题,这样你就可以了解更多关于问题的见解,然后勾选最有帮助的答案,以便其他人意识到这项任务已经完成已完成,人们不会检查此链接。很高兴我能帮上忙:) @AlPap
  • array[i][j] = arr[idx++];i=0 j=0idx=0 表明每个人都指向索引的开头array[0][0] = arr[0] // 10,之后idx++ 递增idx 的值1,并且这种情况一直发生,直到数组完全填满。因此array[0][0] = arr[0] //10array[1][0] = arr[1] //20array[0][1] = arr[2] //30 ...array[2][2] = arr[5] //10
【解决方案2】:

如果 c 有 16 个元素:

for(int i = 0, row = 0; row < 4; ++row)
{
    for(int column = 0; column < 4; ++i, ++column)
    {
        b[row][column] = c[i];
    }
}

【讨论】:

    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2016-02-24
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多