循环遍历二维数组(对角线)C++
looping through a 2D array (diagonal) c++
所以我将数组初始化为数组[8][8] 假设我在点(行,列),例如,它是第 4 行第 4 列,我想遍历每个对角线方向(东南、西南、东北、西北)
所以我写了 4 个不同的函数来单独检查每个方向,这里以东北为例
for(int i = 0; i < 8; i++)
for(int j = 0; j < 8; j++)
if(array[i - 1][j+1] == 'x')
{
count = count + 1;
}
有没有办法同时在所有对角线方向循环?
另一个问题是越界怎么办,比如如果点是 (7,7),那么 northeast 将没有值,因为它会超出数组边界 array[6][8],这超出了数组范围界限。我该如何处理这个问题?还是编译器 return 发生错误时?
你当然可以在各个方向都检查,例如
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 8; j++) {
if (check_north_east(array, i, j))
++count;
if (check_north_west(array, i, j))
++count;
if (check_south_east(array, i, j))
++count;
if (check_south_west(array, i, j))
++count;
}
}
编译器会愉快地超越数组边界。所以你一定要确定,代码是不会做的,自己检查一下
const int NROWS = 8, NCOLS = 8;
bool check_north_east(char array[][NCOLS], int row, int col)
{
if (row <= 0 || col >= NCOLS - 1)
return false;
return array[row - 1][col + 1] == 'x';
}
所以我将数组初始化为数组[8][8] 假设我在点(行,列),例如,它是第 4 行第 4 列,我想遍历每个对角线方向(东南、西南、东北、西北)
所以我写了 4 个不同的函数来单独检查每个方向,这里以东北为例
for(int i = 0; i < 8; i++)
for(int j = 0; j < 8; j++)
if(array[i - 1][j+1] == 'x')
{
count = count + 1;
}
有没有办法同时在所有对角线方向循环? 另一个问题是越界怎么办,比如如果点是 (7,7),那么 northeast 将没有值,因为它会超出数组边界 array[6][8],这超出了数组范围界限。我该如何处理这个问题?还是编译器 return 发生错误时?
你当然可以在各个方向都检查,例如
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 8; j++) {
if (check_north_east(array, i, j))
++count;
if (check_north_west(array, i, j))
++count;
if (check_south_east(array, i, j))
++count;
if (check_south_west(array, i, j))
++count;
}
}
编译器会愉快地超越数组边界。所以你一定要确定,代码是不会做的,自己检查一下
const int NROWS = 8, NCOLS = 8;
bool check_north_east(char array[][NCOLS], int row, int col)
{
if (row <= 0 || col >= NCOLS - 1)
return false;
return array[row - 1][col + 1] == 'x';
}