如何从txt文件中读取迷宫并将其放入二维数组中
How to read a labyrinth from a txt file and put it into 2D array
我刚开始一个小项目,它读取这样一个 txt 文件:
4
XSXX
X X
XX X
XXFX
所以我的问题是如何阅读此内容并将迷宫放入 C++ 中的二维字符数组。我尝试使用 'getline' 但我只是让我的代码更复杂。你知道有没有简单的方法可以解决这个问题?
char temp;
string line;
int counter = 0;
bool isOpened=false;
int size=0;
ifstream input(inputFile);//can read any file any name
// i will get it from user
if(input.is_open()){
if(!isOpened){
getline(input, line);//iterater over every line
size= atoi(line.c_str());//atoi: char to integer method.this is to generate the size of the matrix from the first line
}
isOpened = true;
char arr2[size][size];
while (getline(input, line))//while there are lines
{
for (int i = 0; i < size; i++)
{
arr2[counter][i]=line[i];//decides which character is declared
}
counter++;
}
您的错误是由于您试图声明一个大小为 non-constant 表达式 的数组。
在你的例子中 size
表示数组中元素的数量,必须是 constant expression,因为数组是静态内存块,其大小必须在编译时确定,在程序之前运行。
要解决这个问题,您可以将数组保留为空括号,这样大小将根据您放置在其中的元素数量自动推导出来,或者
你可以使用 std::string
和 std::vector
然后读取 .txt
文件你可以这样写:
// open the input file
ifstream input(inputFile);
// check if stream successfully attached
if (!input) cerr << "Can't open input file\n";
string line;
int size = 0;
// read first line
getline(input, line);
stringstream ss(line);
ss >> size;
vector<string> labyrinth;
// reserve capacity
labyrinth.reserve(size);
// read file line by line
for (size_t i = 0; i < size; ++i) {
// read a line
getline(input, line);
// store in the vector
labyrinth.push_back(line);
}
// check if every character is S or F
// traverse all the lines
for (size_t i = 0; i < labyrinth.size(); ++i) {
// traverse each character of every line
for (size_t j = 0; j < labyrinth[i].size(); ++j) {
// check if F or S
if (labyrinth[i][j] == 'F' || labyrinth[i][j] == 'S') {
// labyrinth[i][j] is F or S
}
if (labyrinth[i][j] != 'F' || labyrinth[i][j] != 'S') {
// at least one char is not F or S
}
}
}
如您所见,此 vector 已经是 "a kind of" 二维 char
数组,仅具有许多额外提供的设施,允许对其内容进行大量操作。
我刚开始一个小项目,它读取这样一个 txt 文件:
4
XSXX
X X
XX X
XXFX
所以我的问题是如何阅读此内容并将迷宫放入 C++ 中的二维字符数组。我尝试使用 'getline' 但我只是让我的代码更复杂。你知道有没有简单的方法可以解决这个问题?
char temp;
string line;
int counter = 0;
bool isOpened=false;
int size=0;
ifstream input(inputFile);//can read any file any name
// i will get it from user
if(input.is_open()){
if(!isOpened){
getline(input, line);//iterater over every line
size= atoi(line.c_str());//atoi: char to integer method.this is to generate the size of the matrix from the first line
}
isOpened = true;
char arr2[size][size];
while (getline(input, line))//while there are lines
{
for (int i = 0; i < size; i++)
{
arr2[counter][i]=line[i];//decides which character is declared
}
counter++;
}
您的错误是由于您试图声明一个大小为 non-constant 表达式 的数组。
在你的例子中 size
表示数组中元素的数量,必须是 constant expression,因为数组是静态内存块,其大小必须在编译时确定,在程序之前运行。
要解决这个问题,您可以将数组保留为空括号,这样大小将根据您放置在其中的元素数量自动推导出来,或者
你可以使用 std::string
和 std::vector
然后读取 .txt
文件你可以这样写:
// open the input file
ifstream input(inputFile);
// check if stream successfully attached
if (!input) cerr << "Can't open input file\n";
string line;
int size = 0;
// read first line
getline(input, line);
stringstream ss(line);
ss >> size;
vector<string> labyrinth;
// reserve capacity
labyrinth.reserve(size);
// read file line by line
for (size_t i = 0; i < size; ++i) {
// read a line
getline(input, line);
// store in the vector
labyrinth.push_back(line);
}
// check if every character is S or F
// traverse all the lines
for (size_t i = 0; i < labyrinth.size(); ++i) {
// traverse each character of every line
for (size_t j = 0; j < labyrinth[i].size(); ++j) {
// check if F or S
if (labyrinth[i][j] == 'F' || labyrinth[i][j] == 'S') {
// labyrinth[i][j] is F or S
}
if (labyrinth[i][j] != 'F' || labyrinth[i][j] != 'S') {
// at least one char is not F or S
}
}
}
如您所见,此 vector 已经是 "a kind of" 二维 char
数组,仅具有许多额外提供的设施,允许对其内容进行大量操作。