如何检查c ++中是否存在array [i] [j]?

时间:2018-11-03 15:10:17

标签: c++ arrays indexof

我有一个二维字符数组,其中所有数字,不包括一个*(如图片所示(两个示例)) enter image description here

我的任务是求和所有邻居整数(在示例1中,*的邻居为4,2,5,8,总和为4 + 2 + 5 + 8 = 19) 但在示例2中,*没有顶部邻居。

我的初始代码如下:

arr[i-1][j] + arr[i+1][j] + arr[i][j-1] + arr[i][j+1]
  

但是后来我了解到不存在像 a [0] [-1] 这样的情况。因此,您可以帮我解决我的问题

2 个答案:

答案 0 :(得分:2)

您需要明确检查每一项。以下应该起作用:

bool inRange(int i, int j) {
    const auto n = 4;   // you need to set this somewhere, or pass it in
    return (i >= 0) && (i < n) && (j >= 0) && (j < n);
}

auto sum = (inRange(i-1, j) ? arr[i-1][j] : 0)
    + (inRange(i+1, j) ? arr[i+1][j] : 0)
    + (inRange(i, j-1) ? arr[i][j-1] : 0)
    + (inRange(i, j+1) ? arr[i][j+1] : 0);

您可能会写得更简洁一些,但不仅需要检查-1,还需要检查3时的情况。

答案 1 :(得分:2)

可以使用多种解决方案来解决此问题,但是如果您希望避免每次都检查边界,可以将矩阵维数扩展为所需的1倍。这意味着如果您有一个数组:

1  *  4  7
8  9  2  3
5  1  2  4
4  3  6  5

实施为:

0  0  0  0  0  0
0  1  *  4  7  0
0  8  9  2  3  0 
0  5  1  2  4  0
0  4  3  6  5  0
0  0  0  0  0  0

这样做甚至都不会影响您的总和。