繁体   English   中英

将一维数组填充到一维数组中

[英]filling a 2d array in a 1d array

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

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

然后我得到的xy该文件的通过做strlen第一个字符串的y和行数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;
}

现在,在我的程序中,我想访问地图的[4][2]位置,因为我创建了一个函数,使用我的func函数返回一维数组中的正确位置,如下所示:

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

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

它对于第一个text(map)效果很好,但是对于第二个text(map)当我开始在地图内部移动时),我在第一次移动时会遇到奇怪的行为

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);
}

我认为这应该是以下内容之一(取决于您的代表):

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM