2015-07-02 115 views
0

我是C++新手,這是我第一次嘗試3D矢量。我試圖把可變長度的這樣一個輸入文件:循環幫助:字符串矢量到3D char矢量

xxooo##xx 
xoxxxoxoo 
xxx#oxoo# 
oxxxoxoox 
xxoooo#xx 
xxxo#o### 
xxo#o#xxo 
x##oxxoox 
xxx##oxoo 
xoxx#xooo 

,並把它轉換成3D字符向量每一行是與前三個字符是第一行的3×3盒,接下來的三個第二排,最後三排第三排。例如,輸入的第一行應該變成這樣:

x x o 
o o # 
# x x 

這是我在一個解決方案的嘗試,但我覺得我可能已經提出了一些錯誤:

vector<vector<vector<char> > > makeBoard(vector<string> iflines) 
{// Function to fill game boards from input strings 

vector<vector<vector<char> > > charboard; 

for (int i = 0; i != iflines.size(); i++) 
{ 
    for (int j = 0; j < 9; j=j+3) 
    { 
     charboard[i][j/3][0] = iflines[i][j]; 
     charboard[i][j/3][1] = iflines[i][j+1]; 
     charboard[i][j/3][2] = iflines[i][j+2];  
    } 
} 
    return charboard; 
} 

會有人請幫我在這裏?

編輯:從建議編輯加上一些事情,我試圖修復。我收到錯誤:Segmentation fault: 11。當我嘗試運行它。

回答

2

您正在致電char上的push_back。你需要做的

charboard[i][j/3][k] = iflines[i][j] 

由於您使用的是固定的3x3陣列的工作,你不需要使用std::vector的內部組件。一個std:array就足夠了,像

using GameBoard = std::array<std::array<char, 3>, 3>; 
vector<GameBoard> charboard; 

此外,您不需要使用if/else語句來計算k,有模%操作其產生的餘數所以它是適合您的情況完全正常:

charboard[i][j/3][j%3] = iflines[i][j] 
+0

我使用的載體,因爲輸入文件的大小是可變的,而箱子都是3x3的,我不知道有多少,我需要它來 – Austin

+0

我編輯與推回至變化'='並將'k'改爲'j%3',我得到分段錯誤,所以我認爲我設置了一個問題這一點,但我無法思考 – Austin