循环帮助:字符串向量到三维字符向量

Loop help: string vector to 3D char vector

本文关键字:向量 字符 三维 字符串 帮助 循环      更新时间:2023-10-16

我是C++的新手,这是我第一次尝试3D矢量。我正在尝试一个可变长度的输入文件,如下所示:

xxooo##xx
xoxxxoxoo
xxx#oxoo#
oxxxoxoox
xxoooo#xx
xxxo#o###
xxo#o#xxo
x##oxxoox
xxx##oxoo
xoxx#xooo

并将其转换为3D字符向量,其中每一行都是一个3x3的框,前三个字符是第一行,后三个是第二行,后一个是第三行。例如,输入的第一行应该变成这样:

x x o
o o #
# x x

这是我尝试的解决方案,但我觉得我可能犯了几个错误:

vector<vector<vector<char> > > makeBoard(vector<string> iflines)
{// Function to fill game boards from input strings
vector<vector<vector<char> > > charboard;
for (int i = 0; i != iflines.size(); i++) 
{   
    for (int j = 0; j < 9; j=j+3)
    {
        charboard[i][j/3][0] = iflines[i][j]; 
        charboard[i][j/3][1] = iflines[i][j+1];
        charboard[i][j/3][2] = iflines[i][j+2];     
    }   
}
    return charboard;
}

有人能帮我一下吗?

编辑:根据建议加上我试图解决的一些问题进行编辑。我得到错误:Segmentation fault: 11。当我尝试运行它时。

您正在char上调用push_back。你需要做

charboard[i][j/3][k] = iflines[i][j]

由于您使用的是固定的3x3阵列,因此不需要对内部组件使用std::vectorstd:array就足够了,类似

using GameBoard = std::array<std::array<char, 3>, 3>;
vector<GameBoard> charboard;

此外,你不需要使用if/else来计算k,还有一个模%算子,它可以产生除法的余数,所以它非常适合你的情况:

charboard[i][j/3][j%3] = iflines[i][j]