簡體   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