【问题标题】:Loop help: string vector to 3D char vector循环帮助:字符串向量到 3D 字符向量
【发布时间】:2015-09-19 10:36:54
【问题描述】:

我是 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。当我尝试运行它时。

【问题讨论】:

    标签: c++ loops vector multidimensional-array


    【解决方案1】:

    您在 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]
    

    【讨论】:

    • 我使用了一个向量,因为输入文件的大小是可变的,所以虽然盒子都是 3x3,但我不知道我需要它来制作多少
    • 我编辑了将 pushback 更改为 = 并将 k 更改为 j%3 并且出现分段错误,所以我认为我的设置方式存在问题,但我我很难想清楚
    猜你喜欢
    • 2013-04-14
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多