代码之家  ›  专栏  ›  技术社区  ›  AL BAHRI

循环通过2D阵列(对角线)c++

  •  0
  • AL BAHRI  · 技术社区  · 7 年前

    因此,我将一个数组初始化为数组[8][8],假设我位于点(行、列),例如,它是第4行第4列,我想在每个对角线方向(东南、西南、东北、西北)循环

    8*8 Array

    所以我编写了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),那么东北方向将没有值,因为它将超过数组边界数组[6][8],这就是数组边界。我如何处理这个问题?或者编译器在发生错误时是否返回错误?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Olaf Dietsche    7 年前

    当然,您可以在每个方向进行检查,例如。

    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';
    }