将文本文件逐个字符地读入数组,也许用向量?

时间:2013-11-24 21:34:53

标签: c++ arrays

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

15681
28515
32414
12451

如果我要分别使用[x]和[y]参数调用grid [3] [2],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++;

我认为这会将所有值正确保存到网格中,但我不知道如何做到这一点的语法。

我想到的另一个想法是可能有一个Points数组,我会创建一个包含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

}

我尝试过程序崩溃的代码

grid[2][1] = 4;
grid[2][1] = "4";
grid[2] = 4;
grid[2] = "4";

程序构建,但在运行时崩溃。

1 个答案:

答案 0 :(得分:3)

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

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

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

现在,通过访问[x][y]点,您将获得文件中正确的字符:

grid[3][2]; // 4