【发布时间】:2014-10-31 12:32:06
【问题描述】:
我目前正在使用 a-star 算法编写程序。因此,我生成了一个随机迷宫并将其保存在 .txt 文件中。文件看起来有点像这样:
19999999199999991
19191119111919191
1 是一堵墙,9 是一个空格。
现在我必须将文件读入一个 findpath 程序,该程序会获取文件并将其读入一个数组。然后程序计算最短路径。
当我将文件的整数复制到源代码时,一切正常。但是现在我想让程序更加动态,因此;我想一次读取文件,计算所需的数组大小并将整数存储在数组中。
我现在最大的问题是我不知道如何读取文件并获取迷宫的大小。
对于我的函数,我必须计算文件中的行数和列数,生成数组并将整数存储在数组中,但我不知道如何执行此操作。我的一个问题是整数没有用空格分隔,而且我无法更改生成文件的程序。
我已经知道如何打开文件,但是;
- 如何获取文件的大小(一行的整数个数,行数),以及;
- 如何将整数分别存储在数组中?
编辑:
所以我用以下代码更新了我的程序:
main
{
ifstream myfile("BLOCK_style_maze.txt");
string line;
int colCount=0;
int rowCount=0;
int temp=0;
if(myfile.is_open())
{
if(getline(myfile,line))
{
rowCount++;
int i=0;
for(i=0;i<line.length();i++)
{
if(line.at(i)=='1' || line.at(i)=='9') colCount++;
}
}
while(getline(myfile, line))
{
rowCount++;
}
cout << "R:"<< rowCount << "C:" << colCount << endl;
myfile.close();
}
else
{
cout << "Unabale to open maze file";
}
MAP_WIDTH = colCount;
MAP_HEIGHT = rowCount;
map=new int [MAP_WIDTH*MAP_HEIGHT];
int k=MAP_WIDTH*MAP_HEIGHT;
int j=0;
if (myfile.is_open())
{
while(myfile >> temp)
{
map[j++] = temp;
}
}
for(int i=0; i<=k; i++ )
{
cout << map[i]<< endl;
}
}
为了测试代码,我想在控制台上打印矩阵映射的条目,但我只得到0 作为输出。所以我有点困惑我做错了什么。
【问题讨论】:
-
std::vector 是你炸的。你不需要告诉他任何东西的大小,它只是......有效:D