【问题标题】:How do I loop through 2d arrays in c++?如何在 C++ 中循环遍历二维数组?
【发布时间】:2019-02-11 21:44:43
【问题描述】:

我试图弄清楚如何在水平垂直、对角线和子对角线上循环遍历二维数组,以查看数组是否等于 char。如果数组等于 char,那么 bool 应该返回 true ,但我的问题是bool 随机返回true。 bool 仅在 char 等于特定列和行的数组时才返回 true。在这里,我对其进行了硬编码,但我想使用 for 循环来完成。 如果您需要更多信息或需要解释什么,请告诉我

if (mCard[0][0] == '*' && mCard[0][1] == '*'&& mCard[0][2] == '*'&& mCard[0][3] == '*' && mCard[0][4] == '*') {

    CheckBingo = true;
}
if (mCard[1][0] == '*' && mCard[1][1] == '*'&& mCard[1][2] == '*'&& mCard[1][3] == '*' && mCard[1][4] == '*') {

    CheckBingo = true;
}
if (mCard[2][0] == '*' && mCard[2][1] == '*'&& mCard[2][2] == '*'&& mCard[2][3] == '*' && mCard[2][4] == '*') {

    CheckBingo = true;
}
if (mCard[3][0] == '*' && mCard[3][1] == '*'&& mCard[3][2] == '*'&& mCard[3][3] == '*' && mCard[3][4] == '*') {

    CheckBingo = true;
}
if (mCard[4][0] == '*' && mCard[4][1] == '*'&& mCard[4][2] == '*'&& mCard[4][3] == '*' && mCard[4][4] == '*') {

    CheckBingo = true;
}


if (mCard[0][0] == '*' && mCard[1][0] == '*'&& mCard[2][0] == '*'&& mCard[3][0] == '*' && mCard[4][0] == '*') {

    CheckBingo = true;
}
if (mCard[0][1] == '*' && mCard[1][1] == '*'&& mCard[2][1] == '*'&& mCard[3][1] == '*' && mCard[4][1] == '*') {

    CheckBingo = true;
}
if (mCard[0][2] == '*' && mCard[1][2] == '*'&& mCard[2][2] == '*'&& mCard[3][2] == '*' && mCard[4][2] == '*') {

    CheckBingo = true;
}
if (mCard[0][3] == '*' && mCard[1][3] == '*'&& mCard[2][3] == '*'&& mCard[3][3] == '*' && mCard[4][3] == '*') {

    CheckBingo = true;
}
if (mCard[0][4] == '*' && mCard[1][4] == '*'&& mCard[2][4] == '*'&& mCard[3][4] == '*' && mCard[4][4] == '*') {

    CheckBingo = true;
}

// checking for daigonal
if (mCard[0][0] == '*' && mCard[1][1] == '*'&& mCard[2][2] == '*'&& mCard[3][3] == '*' && mCard[4][4] == '*') {

    CheckBingo = true;
}
// checking for sub diagonal
if (mCard[4][0] == '*' && mCard[3][1] == '*'&& mCard[2][2] == '*'&& mCard[1][3] == '*' && mCard[0][4] == '*') {

    CheckBingo = true;
}

这里我尝试使用 for 循环,但如果数组等于 char,int 总是返回 true。

for(int row = 0; row < 5; row++) {
    for(int col = 0; col < 5; col++) {
        if(mCard[row][col] == '*') {
            CheckBingo = true;
        }
        else {
            CheckBingo = false;
            break;
        }
    }
}

for(int row = 0; row < 5; row++) {
    for(int col = 0; col < 5; col++) {
        if(mCard[col][row] == '*') {
            CheckBingo = true;
        }
        else {
            CheckBingo = false;
            break;
        }
    }
}

【问题讨论】:

  • 另一种方法是将板存储为 32 位整数中的位(使用 25 位),然后您可以测试每一行的位掩码等以进行检查。这实际上会导致更简单的代码;您可以检查一组掩码。即使您想保留当前的板阵列,最好转换为位板并使用这种方法。 en.wikipedia.org/wiki/Bitboard

标签: c++ visual-c++ multidimensional-array


【解决方案1】:
mCard[col][row]
...

row 和 col 必须翻转。

然后假设匹配已设置,您将开始循环。如果其中一个单元格不匹配,则匹配为假。请参见下面的示例。

确保值已初始化。

int main()
{
    char mCard[5][5] = {
    '*','x','*','*','*',
    '*','*','*','*','*',
    '*','*','*','*','*',
    '*','*','x','*','*',
    '*','*','*','*','*',
    };

    bool CheckBingo = true;
    for(int row = 0; row < 5; row++)
    {
        CheckBingo = true;
        for(int col = 0; col < 5 && CheckBingo; col++)
        {
            if(mCard[row][col] != '*')
                CheckBingo = false;
        }
        if(CheckBingo)
            cout << "bingo on row " << row << "\n";
    }

    bool match = true;
    for(int row = 0; row < 5 && match; row++)
        for(int col = 0; col < 5 && match; col++)
            if(mCard[row][col] != '*')
                match = false;
    if(match) cout << "bingo for all lines\n";

    match = true;
    for(int i = 0; i < 5 && match; i++)
        if(mCard[i][i] != '*')
            match = false;
    if(match) cout << "top-left to bottom-right match\n";

    match = true;
    for(int i = 0; i < 5 && match; i++)
        if(mCard[i][4-i] != '*')
            match = false;
    if(match) cout << "top-right to bottom-left match\n";

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-22
    • 2013-12-27
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多