c++ - 循环帮助 : string vector to 3D char vector

标签 c++ loops vector multidimensional-array

我是 C++ 的新手,这是我第一次尝试 3D vector 。我正在尝试像这样获取可变长度的输入文件:

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

并将其转换为 3D 字符 vector ,其中每行是一个 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::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]

关于c++ - 循环帮助 : string vector to 3D char vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175413/

相关文章:

django - Django 模板中的循环 : how to control the loop iterator?

javascript - 创建并数组,然后循环查找 i 然后提醒用户名

c++ - "vector<long long> distance(n, std::numeric_limits<long long>::max()); "行的含义是什么?

c++ - QComboBox 和 HeaderItem

c++ - 在转换 IP 时修复 inet_ntoa 中的 Endianess 错误显示反向值

c++ - 在分配给指向固定数组的指针期间没有指针衰减

java - 我使用 Java 用一种方法编写了一个 "Rock, Paper, Scissor, Shoot"游戏。我需要帮助循环程序

c++ - 如何通过类构造函数访问私有(private)静态成员变量?

ruby - 为什么 Ruby cross_product 返回的值与纸上的叉积不同

c++ - 像 std::vector 这样的 vector 类的简单实现