从txt文件行中获取多维数组

时间:2015-09-28 13:37:26

标签: c++ c arrays

我有这个文本文件,其中包含与我的游戏地图相关的5行。 我想读取其中一个文本行并将它们转换为bool的2D数组。 我已成功读取其他行,但在最后一行,格式化为这样(原始行更长):

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

但无法找到一种将其转换为2D bool数组的有效方法。

尝试过这个循环(因为我相信我的地图格式化而无效):

for (int y = 0; y < this->map_height; y++)
{
    for (int x = 0; x < this->map_width; x++)
    {
        char temp;
        mapFile >> temp;
        std::cout << temp;
        if (temp == '0')
            this->collisions[x][y] = false;
        else if (temp == '2')
            this->collisions[x][y] = true;
    }
}

但是由于我的格式中有,,我遇到了其他问题。 如何有效地读取该行并转换为2D维数组?

3 个答案:

答案 0 :(得分:1)

将整行读入字符串,将字符串放入std::istringstream对象,标记化(使用std::getline ','作为分隔符)数字(作为数字而不是字符),并将数字放在矩阵中的正确位置。

这是一种方式。

答案 1 :(得分:1)

只是Joachim Pileborg的回复。您可以直接在','中使用逗号(std::getline)分隔符在逗号上拆分输入文件,然后使用istringstream或仅使用strtol将个别元素解析为整数。类似的东西:

for(int i=0; i<sizeof(ival)/sizeof(ival[0]); i++) {
    for (int j=0; j<sizeof(ival[0])/sizeof(ival[0][0]); j++) {
        std::getline(in, tok, ',');
        ival[i][j] = strtol(tok.c_str(), NULL, 10);
    }
}

答案 2 :(得分:0)

如果您不反对更改输入文件,最简单的方法是从输入中删除所有(,)。这将允许您使用大多数未更改的代码。否则,您需要使用前面提到的istringstream。或者作为字符串读取并删除每个,然后转换为整数