如何使用 for 循环将一维数组的值放入 C++ 中的二维数组
Posted
技术标签:
【中文标题】如何使用 for 循环将一维数组的值放入 C++ 中的二维数组【英文标题】:How to put the values of a 1D array into a 2D array in C++ using for loop 【发布时间】: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]
都将具有相同的值。
【参考方案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<size
在用一维数组填充二维数组的内部嵌套循环中。这样您就可以处理奇数大小的一维数组。
【讨论】:
所以,显然这可行,谢谢!我必须添加: int idx = 0;你能详细说明一下吗?那是如何工作的?任何 cmets 都会很有用。 Np 只是试着在副本上画出你的问题,这样你就可以了解更多关于问题的见解,然后勾选最有帮助的答案,以便其他人意识到这项任务已经完成已完成,人们不会检查此链接。很高兴我能帮上忙:) @AlPaparray[i][j] = arr[idx++];
和i=0
j=0
和idx=0
表明每个人都指向索引的开头array[0][0] = arr[0] // 10
,之后idx++
递增idx
的值1,并且这种情况一直发生,直到数组完全填满。因此array[0][0] = arr[0] //10
、array[1][0] = arr[1] //20
、array[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];
【讨论】:
以上是关于如何使用 for 循环将一维数组的值放入 C++ 中的二维数组的主要内容,如果未能解决你的问题,请参考以下文章