c++ - 如何将文件中的字符放入二维向量中?
问题描述
我一直在尝试从外部文件中读取字符,以将其放入 type 的二维向量中char
。这些元素必须能够与某些值进行比较,才能在“ MazeSample.txt
”中给出的迷宫中导航。
虽然我无法将字符放入向量中,但我能够使用get
andcout
函数读取和输出字符。以下代码尝试以正确的格式读取向量,但最终提供了错误:
//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>>>"
解决方案
您正在插入char
到vector<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();
推荐阅读
- visual-studio-code - 我无法在 Manjaro 上启动 Visual Studio 代码
- typescript - asyncData 和 fetch 没有设置数据
- php - 如何在 Laravel 中使用子文件夹中的自定义类?
- javascript - 固定导航栏与锚标签重叠
- python - 导入 rsa 私钥并加密字符串
- java - 正则表达式 - 查找某个字符出现的所有数字
- elixir - 如果嵌入模式中已经存在一个项目,我如何让这个函数更新它的数量并且不将该项目添加到列表中?
- swift - SwiftUI 自动调整底页大小
- apache-nifi - 如何在 cloudera manager 上更改 NiFi 属性
- node.js - 使用表单数据 Multer NPM 包上传图片