首页 > 解决方案 > 如何将文件中的字符放入二维向量中?

问题描述

我一直在尝试从外部文件中读取字符,以将其放入 type 的二维向量中char。这些元素必须能够与某些值进行比较,才能在“ MazeSample.txt”中给出的迷宫中导航。

虽然我无法将字符放入向量中,但我能够使用getandcout函数读取和输出字符。以下代码尝试以正确的格式读取向量,但最终提供了错误:

//MazeSample.txt
SWWOW
OOOOW
WWWOW
WEOOW

//source.cpp
vector<vector<char>> maze;
ifstream mazeFile;
char token;

mazeFile.open("MazeSample.txt");

while (!mazeFile.eof()) {
    mazeFile.get(token); //reads a single character, goes to next char after loop

    for (int row = 0; row < maze.size(); row++) {
        for (int column = 0; column < maze.at(row).size(); row++) {
            maze.push_back(token);
        }
    }

    //cout << token;
}

mazeFile.close();

对于“ MazeSample.txt”中提供的迷宫,我希望maze向量能够逐行读取每个字符,模仿迷宫样本的格式。

在上面的代码中,我提供了一个错误maze.push_back(token):“没有重载函数的实例”std::vector<_Ty,_Alloc>::push_back...”匹配参数列表”“参数类型是:(char)”“对象类型为:std::vector>、std::allocator>>>"

标签: c++c++11file-io2d-vector

解决方案


您正在插入charvector<vector<char>>. 您应该创建一个vector<char>,将 type 的值插入char其中,然后插入vector<char>to vector<vector<char>> maze;。这是您的程序的更正版本。它可以用简单的方式编写,但为了您的理解,我已经在您的程序之上进行了更正。

vector<vector<char>> maze;
ifstream mazeFile;
string token;

mazeFile.open("MazeSample.txt");

while (!mazeFile.eof()) {
    std::getline(mazeFile, token); //reads an entire line

    //Copy characters in entire row to vector of char
    vector<char> vecRow;
    vecRow.assign(token.begin(), token.end());

    //Push entire row of characters in a vector
    maze.push_back(vecRow);

}

mazeFile.close();

推荐阅读