C 布尔数组初始化

新手上路,请多包涵

我想将二维布尔数组中的所有元素初始化为 false。

 size_t n, m;
cin >> n >> m;
bool arr[n][m] = {false};
for(size_t i = 0; i < n; i++){
    for(size_t j = 0; j < m; j++){
        cout << arr[i][j] << " ";
    }
    cout << endl;
}

但我对输出感到非常困惑。例如,如果 n = 5 和 m = 5,我有以下内容:

 0 27 64 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

那么,代码有什么问题?

原文由 False Promise 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

使用 for 结构初始化值,与打印它的方式完全相同

     bool arr[n][m];
     for(size_t i = 0; i < n; i++){
         for(size_t j = 0; j < m; j++){
             arr[i][j]=false;
         }
     }

原文由 Ricardo Ortega Magaña 发布,翻译遵循 CC BY-SA 3.0 许可协议

从字符串初始化布尔数组

跳过这个问题,我提出了一个解决方案,其中 boolean array 可以由 string 初始化。因此 '0'=false , '1'=true' '=just a spacer 。这与 bitset 构造函数 类似。

代码

#include <iostream>

/**
 * Fills boolean array based on a simple string
 *
 * @param[out] boolean array to be filled
 * @param[in] str accepts only 0 (false), 1 (true) and space (seperator) chars in string
 * @param[in] nMax maximum number of elements to write, -1 is infinite
 * @returns number of writen boolen elements
 */
size_t boolArray_from_string(bool *boolArray, const std::string str, const int nMax = -1)
{
    size_t size = str.size();
    size_t n = 0;
    int cc;
    for (cc = 0; cc < size; cc++)
    {
        if (str.at(cc) == ' ') {continue;}
        if (str.at(cc) != '0' && str.at(cc) != '1')
        {
            throw std::invalid_argument("str must contain only 0s, 1s and spaces.");
        }
        if (n == nMax)
        {
            throw std::invalid_argument("nMax too small for str content.");
        }

        if (str.at(cc) == '0')
        {
            boolArray[n] = false;
        }
        else
        {
            boolArray[n] = true;
        }
        n++;
    }
    return cc;
}

void print(bool *x, int nRows, int nCols)
{
    for(int row=0; row<nRows; row++)
    {
        for(int col=0; col<nCols; col++)
        {
            std::cout << x[row * nCols + col] << " ";
        }
        std::cout << "\n";
    }
    std::cout << "\n\n";
};

int main()
{
    bool falseArr[3][5];
    boolArray_from_string(&falseArr[0][0], std::string(15, '0'), -1);
    print(&falseArr[0][0], 3, 5);

    bool custArr[3][5];
    boolArray_from_string(&custArr[0][0], "01011 00111 11111", -1);
    print(&custArr[0][0], 3, 5);
}

输出

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

0 1 0 1 1
0 0 1 1 1
1 1 1 1 1

原文由 Markus Dutschke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题