将文本文件读入2d数组c ++

时间:2014-05-01 15:08:40

标签: c++ file

 char initialMaze[ SIZEY+1][ SIZEX+1]  //local array to store the maze structure
          = { {'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'},
              {'X', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
              {'X', '#', '#', '#', '#', '#', ' ', ' ', ' ', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
              {'X', '#', '#', '#', '#', '#', ' ', ' ', ' ', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
              {'X', '#', '#', '#', '#', '#', ' ', ' ', ' ', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
              {'X', '#', '#', '#', ' ', ' ', ' ', ' ', ' ', ' ', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
              {'X', '#', '#', '#', ' ', '#', ' ', '#', '#', ' ', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
              {'X', '#', ' ', ' ', ' ', '#', ' ', '#', '#', ' ', '#', '#', '#', '#', '#', ' ', ' ', '+', '+', '#'},
              {'X', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '+', '+', '#'},
              {'X', '#', '#', '#', '#', '#', ' ', '#', '#', '#', ' ', '#', ' ', '#', '#', ' ', ' ', '+', '+', '#'},
              {'X', '#', '#', '#', '#', '#', ' ', ' ', ' ', ' ', ' ', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
              {'X', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},             };

您好, 我正在尝试创建一些代码,从.txt文件加载此迷宫布局并将其放入二维数组中。目前它只是将迷宫布局直接放入2d数组而不将其存储在.txt文件中。 有谁知道我会怎么做?

4 个答案:

答案 0 :(得分:1)

步骤1:创建一个类似于:

的文本文件
XXXXXXXXXXXXXXXXXXXX
X###################
X#####   ###########
X#####   ###########
X#####   ###########
X###      ##########
X### # ## ##########
X#   # ## #####  ++#
X#               ++#
X##### ### # ##  ++#
X#####     #########
X###################

第2步:编写用于阅读迷宫文本文件的代码

char initialMaze[SIZEY+1][SIZEX+1];
int row = 0;
ifstream fstrm("filename.txt");
while(fstrm.getline(initialMaze[row], SIZEX+1)) {
    ++row;
}

答案 1 :(得分:0)

如果代表迷宫的文本位于名为maze.txt的文本文件中, 那么下面的代码就足够了,

  char initialMaze[SIZEY+1][ SIZEX+1];
  string temp;
  int i=0;
  ifstream var("maze.txt");
  if (myfile.is_open())
  {
    while(getline(var,temp) )
    {
      strcpy(initialMaze[i],temp.c_str());
      i++;
    }
    myfile.close();
  }

答案 2 :(得分:0)

maze.txt:

XXXXXXXXXXXXXXXXXXXX
X###################
X#####   ###########
X#####   ###########
X#####   ###########
X###      ##########
X### # ## ##########
X#   # ## #####  ++#
X#               ++#
X##### ### # ##  ++#
X#####     #########
X###################

maze.cpp:

#include <fstream>
#include <string>
#include <vector>
#include <cstdlib>

int main() {
  std::ifstream fin("maze.txt");
  if (!fin) return EXIT_FAILURE;

  std::vector<std::string> maze;
  std::string line;
  while (std::getline(fin, line)) {
    maze.push_back(line);
  }
}

这会将数据转换为maze,您可以使用maze[row][column]访问任何单元格。迷宫几乎可以是任何尺寸,并且行甚至不必都是相同的长度。 (只需确保当您访问行和列在迷宫内的元素时:

if (0 <= row && row < maze.size() && 0 <= column && column < maze[row].size()) {
    maze[row][column] ...
}

答案 3 :(得分:0)

的text.txt

1880    1   0   67.50   10.50   -1.00   -1.00
1880    1   4   66.50   11.50   -1.00   -1.00
1880    1   8   66.50   11.50   -1.00   -1.00
1880    1   12      65.50   11.50   -1.00   -1.00
1880    1   16      64.50   11.50   -1.00   -1.00
1880    1   20      63.50   12.50   -1.00   -1.00
1880    2   0   63.50   12.50   -1.00   -1.00
1880    2   4   62.50   12.50   -1.00   -1.00
1880    2   8   62.50   12.50   -1.00   -1.00

text.cpp

#include <vector>
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
    vector<vector<double> > data;
    ifstream file("D:\\test.txt");// file path
    string line;
    while (getline(file, line))
    {
        data.push_back(vector<double>());
        istringstream ss(line);
        double value;
        while (ss >> value)
        {
            data.back().push_back(value);
        }
    }
    for (int y = 0; y < data.size(); y++)
    {
        for (int x = 0; x < data[y].size(); x++)
        {
            cout<<data[y][x]<< " ";
        }
        cout << endl;
    }
    return 0;
}

运行结果:

1880 1 0 67.5 10.5 -1 -1
1880 1 4 66.5 11.5 -1 -1
1880 1 8 66.5 11.5 -1 -1
1880 1 12 65.5 11.5 -1 -1
1880 1 16 64.5 11.5 -1 -1
1880 1 20 63.5 12.5 -1 -1
1880 2 0 63.5 12.5 -1 -1
1880 2 4 62.5 12.5 -1 -1
1880 2 8 62.5 12.5 -1 -1
Press any key to continue