C++文件流向量输入
我目前在使用C++。我的目标是通过我计划能够存储的一系列步骤来实现A *算法,并列出从点A到点B的最短路径。C++文件流向量输入
我的程序将采用命令行方式,这个参数将是一个读入的文件。给程序一个读入文件的目的是每个文件都是它自己的“网格”,以供A *处理。网格文件的格式如下:
货号1 = WIDTH然后货号2 = HEIGHT
O =开始
* =完成
。 =尚可节点
#=不可逾越的高墙
因此,一个示例格,让我们把它称为“GRID1”,将是:
8 5
o......#
......##
.....###
....####
.......*
所以处理这种情况,当你运行程序,你会通过在“Grid1”中。 从这里开始,我计划创建一个文件流并将每个字符读入一个二维数组/矢量,以尝试重新创建网格,以便可以拥有位置。例如,在“Grid1”中,字符“o”将位于Array/Vector中的位置[0] [0]处。我试图实现如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
using namespace std;
int main(int argc, char *argv[])
{
//Checking for CLA
if(argc < 1)
{
cout << "Program must take atleast <1> arguments!" << endl << "1) File to read 2) OPTIONAL: Type of search" << endl;
}
//CLA #1 is the file containing GRID to be read in
string gridTBO = argv[1];
//Start new filestream and open grid file for reading
ofstream gridFile;
gridFile.open(gridTBO);
//Check to make sure we can even open the file before proceeding
if(gridFile.is_open())
{
//To store grid data
vector<string> grid;
grid[0][0].push_back("Hello");
cout << grid[0][0];
}
然而,在关于我“的push_back”,看来,我不能够打印出或抛掷数据到载体。我主要想要[0] [0] [0] [1] [0] [2]等每个索引来保存每个单独的字符,以重新创建一个像我通过的网格。
我是不太清楚我做错了什么,因为我对矢量的使用相当缺乏经验,但是,将数据推入网格的代码纯粹是为了测试目的。一旦我能够将一些数据解析到矢量中,然后我想用循环来自动化它,并使用“getline”或类似函数为我获取数据。
所以我的主要问题是: 1)为什么我的push_back和print out失败? 2)如何通过循环读取char字符以防止手动输入数据?
我收到运行时错误是: 分段错误(核心转储)
谢谢大家提前为您的帮助和知识!
ofstream
用于输出文件。使用ifstream
来读取文件。
vector<string> grid;
vector<string>
将适用于您的情况。但它更容易创建矢量的2-d阵列vector<vector<char>>
,那么你访问grid[x][y]
不像数组,向量没有任何元素被创建时,所以没有有效grid[x][y]
或grid[x]
直到你添加的东西到它。
尝试此代码,而不是:
int main()
{
ifstream fin("test.txt");
vector<vector<char>> grid;
int row = 0;
string line;
while(fin >> line)
{
grid.resize(row + 1);
for(auto c : line)
grid[row].push_back(c);
row++;
}
for(auto row_vector : grid)
{
for(auto e : row_vector)
cout << e;
cout << "\n";
}
return 0;
}
无自我尊重C++编译器将编译'网格[0] [0] .push_back( “你好”);''时是grid',据称,一个' std :: vector',没有大声吠叫。你的问题声称你编译了这个,并且在运行时崩溃了。这显然不是真正被编译的代码,如果是的话,但这个问题中显示的代码是幻想代码。如果你想要一个真正的问题的真实答案,有必要展示真正的代码,而不是幻想代码,[mcve]。此外,在这个问题上,冗长的介绍与任何东西都没有关系,只是浪费阅读时间。 –
我的歉意,这实际上是我的代码,我只是简单介绍了为什么我使用矢量的第一个地方。我希望将来我能提出更好的问题,不管我做错了什么,我都会再次道歉,我只是想知道事情是为什么而不是在工作。我对使用C++向量相对比较陌生,当你提到它是绝对错误时,这就是我的问题,我不明白为什么这会是如此“荒谬”和“幻想” – Illu
荒谬是你声称seg错误,一些只能在运行时出现的代码,无法编译,因此无法运行。我们不能告诉你是什么导致段错误,因为根据提供的信息,它根本不会发生。这是荒谬的。 – user4581301