在1d数组中填充2d数组

时间:2014-05-28 14:09:11

标签: c++ c arrays

我正在阅读这样的文本文件:

wwwwwwwwwwwwwww
wffbbbbbbbbbffw
wf1bwbwbwbwbwfw
wbbbbbbbbbbbbbw
wbwbwbwbwbwbwbw
wbbbbbbbbbbbbbw
wbwbwbwbwbwbwbw
wbbbbbbbbbbbbbw
wbwbwbwbwbwbwbw
wbbbbbbbbbbbbbw
wbwbwbwbwbwbwbw
wbbbbbbbbbbbbbw

fffffffffffffff
wffffffffffffff
fwfffffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
ff1ffffwfffffff
fffffffwfffffff
fffffffwfffffff
fffffffwfffffff
fffffffffffffff
fff2fffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
wffffffffffffff
fwfffffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
fffffffwfffffff
fffffffwfffffff
fffffffwfffffff
fffffffwfffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff

然后,通过x的第一个字符串的y和{{1}的行数,我得到此文件的strleny }:

x

现在在我的程序中我想访问让我们说地图的void Map::get_size_map(char *dat_name) { std::ifstream ifs; int x; int y; char c; x = 0; y = 0; c = 0; ifs.open (dat_name, std::ifstream::in); if(ifs.is_open()) { while(!ifs.eof()) { c = ifs.get(); if(y == 0 && c != '\n') x++; if(c == '\n') y++; } } ifs.close(); this->x_map = x; this->y_map = y; } 位置,因为我创建了一个函数,用我的func返回正确的位置在我的1d数组中:

[4][2]

它适用于第一个int Map::fix_Pos(int x, int y) { int x_r; int y_r; x_r = x * this->x_map; return (x_r + y); } ,但是对于第二个,当我开始在地图内移动时,我在第一步时会出现奇怪的行为

2 个答案:

答案 0 :(得分:1)

int Map::fix_Pos(int x, int y)
{
  int x_r;
  int y_r;

  x_r = x * this->x_map;
  return (x_r + y);
}

实际上,你将水平线(即X)乘以水平线(即Y)。通过这样做,你将获得与地图相反的位置。

尝试将垂直线(Y)的数量乘以线的大小,然后将其余部分添加为水平线。

试试这个:

int Map::fix_Pos(int x, int y)
{
  return (y * this->x_map + x);
}

答案 1 :(得分:0)

我认为它应该是以下之一(取决于您的陈述):

int Map::fix_Pos(int x, int y) const
{
    return y * this->x_map + x;
}

int Map::fix_Pos(int x, int y) const
{
    return x * this->y_map + y;
}