C++ 一个字符一个字符地将文本文件读入数组,可能是矢量?

C++ 一个字符一个字符地将文本文件读入数组,可能是矢量?,c++,arrays,C++,Arrays,我有一个矩形格式的文本文件,包含各种字符。我要做的是将该文本文件读入二维数组,如网格。例如,如果文本文件是这样的 15681 28515 32414 12451 如果我调用grid[3][2],分别使用[x]和[y]参数,grid[3][2]的值将是5,在第3行第2列中找到 我最初尝试通过将网格声明为char数组来实现这一点 array[x][y] 其中,我通过读取文件中的行数和一行中的字符数来确定x和y的值(文件中有多少行,文件中有多少列)。我知道我的代码可能是多余的,我可以通过实现一个向

我有一个矩形格式的文本文件,包含各种字符。我要做的是将该文本文件读入二维数组,如网格。例如,如果文本文件是这样的

15681
28515
32414
12451
如果我调用grid[3][2],分别使用[x]和[y]参数,grid[3][2]的值将是5,在第3行第2列中找到

我最初尝试通过将网格声明为char数组来实现这一点

array[x][y]
其中,我通过读取文件中的行数和一行中的字符数来确定x和y的值(文件中有多少行,文件中有多少列)。我知道我的代码可能是多余的,我可以通过实现一个向量数组来减少工作量,但我不确定我将如何做到这一点

int x = 0; int y = 0;
grid[x][y] = whatever the current character in the file is;
every time a character is stored, x++
when a newline is encountered, y++;
我认为这样可以正确地将所有值保存到网格中,但我不知道如何使用语法

我考虑的另一个想法是可能有一个点数组,我将创建一个包含X值和Y值的类,尽管我不知道如何实际实现它

我不知道如何在语法上执行第一个选项,也不知道如何从第二个选项开始。有人能给我一些提示或引导我了解任何有助于我学习的信息吗

编辑: 崩溃的代码

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>
#include <vector>
using namespace std;
std::vector<std::string> grid;
std::string line;
int main(int argc, char** argv)
{
std::string current_exec_name = argv[0];
std::string filename;
if (argc > 1){
    filename = argv[1];
}
cout << filename;
ifstream infile(filename.c_str());
while (infile.good())
{
    grid.push_back(line);
}
grid[2][1] = 4;
//the line above

}

程序生成,但运行时崩溃。

您可以使用字符串向量将每一行插入:

std::vector<std::string> grid;
std::string line;

while (std::getline(in, line))
{
    grid.push_back(line);
}

可以使用字符串向量将每一行插入:

std::vector<std::string> grid;
std::string line;

while (std::getline(in, line))
{
    grid.push_back(line);
}

可以使用字符串向量将每一行插入:

std::vector<std::string> grid;
std::string line;

while (std::getline(in, line))
{
    grid.push_back(line);
}

可以使用字符串向量将每一行插入:

std::vector<std::string> grid;
std::string line;

while (std::getline(in, line))
{
    grid.push_back(line);
}


网格[3][2]
实际上应该返回4(假设我们从0开始计算索引)。是吗?是的,我只是忘了包括0。对不起<代码>网格[3][2]实际上应该返回4(假设我们从0开始计算索引)。是吗?是的,我只是忘了包括0。对不起<代码>网格[3][2]实际上应该返回4(假设我们从0开始计算索引)。是吗?是的,我只是忘了包括0。对不起<代码>网格[3][2]实际上应该返回4(假设我们从0开始计算索引)。是吗?是的,我只是忘了包括0。很抱歉实际上,我正在尝试作为一个测试,(在实现上述代码之后),声明grid[3][2]=4,然后cout grid[3][4],但是程序崩溃了。它构建正确,但它崩溃了。你给我的代码的第一行,我是不是应该对网格做一个不同的声明?@JoJoBya你能给我看看你崩溃的实际代码吗?也许我能帮上忙。@JoJoBya我想我看到了问题所在。你正在做
while(infle.good())
而你应该做
while(std::getline(infle,line))
。很抱歉,我花了这么长时间才回复,我不得不帮我妈妈做点什么。好吧,用while(std::getline(infle,line))替换while(infle.good())会让我出现一个错误:“调用‘getline’时没有匹配的函数。事实上,我正在尝试作为测试,(在实现上述代码之后),声明grid[3][2]=4,然后cout grid[3][4],但程序崩溃了。它构建正确,但它崩溃了。你给我的代码的第一行,我应该对网格做不同的声明吗?@JoJoBya你能给我看看你崩溃的实际代码吗?也许我能帮上忙。@JoJoBya我想我看到了问题。你应该在
while(infle.good())
什么时候做
while(std::getline(infle,line))
。很抱歉,我花了这么长时间才回复,我不得不帮我妈妈做点什么。好吧,用while(std::getline(infle,line))替换while(infle.good())会使我出现一个错误:“调用‘getline’时没有匹配的函数。事实上,我正在尝试作为一个测试,(在实现上述代码之后),声明grid[3][2]=4,然后不能执行grid[3][4],但程序崩溃了。它构建正确,但崩溃了。你给我的代码的第一行,我应该对grid做不同的声明吗?@JoJoBya你能给我看一下崩溃的实际代码吗?也许我能帮上忙。@JoJoBya我想我看到问题了。你正在做
(infle.good())
什么时候你应该做
while(std::getline(infle,line))
。很抱歉,我花了这么长时间才回复,我不得不帮我妈妈做点什么。嗯,用while(std::getline(infle,line))替换while(infle.good())会给我一个错误“调用‘getline’时没有匹配的函数。事实上,作为测试,(在实现上述代码之后),我尝试声明grid[3][2]=4,然后cout grid[3][4],但程序崩溃了。它构建正确,但它崩溃了。你给我的代码的第一行,我应该对网格做不同的声明吗?@JoJoBya你能给我看看你崩溃的实际代码吗?也许我能帮上忙。@JoJoBya我想我看到了问题。你应该在
while(infle.good())
什么时候做
while(std::getline(infle,line))
。很抱歉,我花了这么长时间才回复,我不得不帮我妈妈做点什么。嗯,用while(std::getline(infle,line))替换while(infle.good())会使我出现一个错误:“调用‘getline’时没有匹配的函数,让我们来看看。”