2015-09-28 54 views
0

我有這個文本文件,其中包含與我的遊戲地圖相關的5行。 我想讀取這些文本行之一,並將它們轉換爲bool s的二維數組。 我已經成功地讀取其他線路,但在最後一行,這是格式化像這樣(原線長得多):從txt文件行中獲取多維數組

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 

但不能想出一個好有效的方式將其轉換到2D bool陣列。

試過這個循環(這是不是因爲我的地圖格式,我相信工作):

for (int y = 0; y < this->map_height; y++) 
{ 
    for (int x = 0; x < this->map_width; x++) 
    { 
     char temp; 
     mapFile >> temp; 
     std::cout << temp; 
     if (temp == '0') 
      this->collisions[x][y] = false; 
     else if (temp == '2') 
      this->collisions[x][y] = true; 
    } 
} 

但自從我在格式有,我遇到的其他問題。 如何讀取該行並有效轉換爲二維維陣列?

+1

您是否被質疑縮小到如何處理'','? –

+0

@jafar我想出了一個辦法來處理 「','它只是它似乎有一個更好的方法來做到這一點。我指的是喬喬姆所說的。 – zarko

回答

1

閱讀整個線成一個字符串,把字符串轉換成std::istringstream對象,標記化(使用std::getline','作爲分離器)的數字(如號碼並且不作爲字符)在一個循環中,並把在所述數矩陣中的正確位置。

那就是一個這樣做的方法。

+0

這就是我的想法,但它似乎有一個更好的方式來做到這一點。 任何想法? – zarko

+0

@ user1885604還有其他方法,但我認爲這是最簡單的方法。問題在於逗號,如果沒有逗號,它可能會更簡單。 :) –

+0

同意。我也很感興趣,如果你不介意我問你,如果它沒有太多打擾你,你將如何將行變成二維數組:) – zarko

0

如果您不反對更改輸入文件,最簡單的方法是從輸入中刪除所有(,)。這將允許你使用你的代碼大部分不變。否則,您將需要使用前面提到的istringstream。或讀作爲一個字符串,並刪除每個,然後轉換爲整數

1

只是後續約阿希姆Pileborg答案。您可以直接使用逗號(',')分隔符std::getline以逗號分割輸入文件,然後使用istringstream或簡單地使用strtol將個別元素解析爲整數。例如:

for(int i=0; i<sizeof(ival)/sizeof(ival[0]); i++) { 
    for (int j=0; j<sizeof(ival[0])/sizeof(ival[0][0]); j++) { 
     std::getline(in, tok, ','); 
     ival[i][j] = strtol(tok.c_str(), NULL, 10); 
    } 
}