我是C ++的新手,这是我第一次尝试使用3D矢量。我试图采用可变长度的输入文件,如下所示:
xxooo##xx
xoxxxoxoo
xxx#oxoo#
oxxxoxoox
xxoooo#xx
xxxo#o###
xxo#o#xxo
x##oxxoox
xxx##oxoo
xoxx#xooo
并将其转换为3D字符向量,其中每行为3x3框,前三个字符为第一行,后三个为第二行,后三个为第3行。例如,输入的第一行应该变为:
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
。当我尝试运行它时。
答案 0 :(得分:2)
您正在char
上调用push_back。你需要做
charboard[i][j/3][k] = iflines[i][j]
由于您使用的是固定的3x3阵列,因此不需要为内部组件使用std::vector
。 std: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]