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

Get a multi dimensional array out of a txt file row

本文关键字:数组 获取 txt 文件      更新时间:2023-10-16

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

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

但无法找到一种有效的方法将其转换为二维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;
    }
}

但由于我有,在我的格式,我遇到了其他问题。

如何读取该行并有效地转换为二维数组?

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

这是一种方法

这是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);
    }
}

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