2011-02-15 34 views
0

我有8個不同的陣列,並且每個陣列中有8個字符創建矩陣,使用字符陣列中的C++

 std::string str_v1 = v1.to_string(); 
     char arr_v1[9] = {0}; 
     std::copy(str_v1.begin(), str_v1.end(), arr_v1); // from str_v1 to str_v8 

     std::string str_v8 = v8.to_string(); 
     char arr_v8[9] = {0}; 
     std::copy(str_v8.begin(), str_v8.end(), arr_v8); 

如何將此轉換成8×8矩陣?我想把這些值逐列放置,就好像每個數組都轉換爲矩陣的一列,如array1到column1,array2到column2等等,就像array1的值將被放置成矩陣[0] [0]一樣, ,矩陣[1] [0],矩陣[2] [0]等.. 我認爲,需要做的事情是這樣的:

char matrix[8][8]; 
     for(int y=0;y<8;y++) 
     { 
       matrix[y][0] = arr_v1[y]; 
       matrix[y][1] = arr_v2[y]; 
       matrix[y][2] = arr_v3[y]; 
       matrix[y][3] = arr_v4[y]; 
       matrix[y][4] = arr_v5[y]; 
       matrix[y][5] = arr_v6[y]; 
       matrix[y][6] = arr_v7[y]; 
       matrix[y][7] = arr_v8[y]; 
     } 
+0

聽起來像功課......如果是這樣,請重新提出您的問題並展示一些工作。 – 2011-02-15 17:01:32

+0

你在使用什麼樣的矩陣庫? boost.ublas? MTL?徵?你正在實施你自己的Matrix類嗎?或者你指的是內置2D陣列? – Cubbi 2011-02-15 17:23:02

回答

0
for(int y=0;y<8;y++) 
     { 
      for(int z=0;z<8;z++) 
      { 
      switch(y) 
      { 
      case 0: 
      matrix[z][y] = arr_v1[z]; //Be pretty sure, possibly you are better than you believe 
      break;     // I've placed y before z as y is the outer loop, hence it 
      case 1:     // should be responsible for ROWS and z for COLUMNS 
      matrix[z][y] = arr_v2[z]; // Goes in matrix[0][1],[1][1],[2][1],[3][1]...[7][1] 
      break; 
      case 2: 
      matrix[z][y] = arr_v3[z]; // Goes in matrix[0][2],[1][2],[2][2],[3][2]...[7][2] 
      break; 
      case 3: 
      matrix[z][y] = arr_v4[z]; // Goes on 
      break; 
      case 4: 
      matrix[z][y] = arr_v5[z]; // And on 
      break; 
      case 5: 
      matrix[z][y] = arr_v6[z]; // And on 
      break; 
      case 6: 
      matrix[z][y] = arr_v7[z]; 
      break; 
      case 7: 
      matrix[z][y] = arr_v8[z]; 
      break; 
      } 
      } // Finally all 8 1x8 arrays stored into single 8x8 matrix 
     } 

有你有它那麼你的方式,每個1×8作爲一列,而不是一行來像前一個:)

0
char *matrix[9]; 
for (int i = 0; i < 9; ++i) { 
    matrix[i] = new char[9]; 
    std::copy(your_ith_string.begin(), your_ith_string.end(), matrix[i]); 
} 
//Finish your work with the matrix 
for (int i = 0; i < 9; ++i) { 
    delete[] matrix[i]; 
} 
0

你自己是相當正確的:

for(int y=0;y<8;y++) 
     { 
      for(int z=0;z<8;z++) 
      { 
      switch(y) 
      { 
      case 0: 
      matrix[y][z] = arr_v1[z]; //Be pretty sure, possibly you are better than you believe 
      break;     // I've placed y before z as y is the outer loop, hence it 
      case 1:     // should be responsible for ROWS and z for COLUMNS 
      matrix[y][z] = arr_v2[z]; // Goes in matrix[1][0],[1][1],[1][2],[1][3]...[1][7] 
      break; 
      case 2: 
      matrix[y][z] = arr_v3[z]; // Goes in matrix[2][0],[2][1],[2][2],[2][3]...[2][7] 
      break; 
      case 3: 
      matrix[y][z] = arr_v4[z]; // Goes on 
      break; 
      case 4: 
      matrix[y][z] = arr_v5[z]; // And on 
      break; 
      case 5: 
      matrix[y][z] = arr_v6[z]; // And on 
      break; 
      case 6: 
      matrix[y][z] = arr_v7[z]; 
      break; 
      case 7: 
      matrix[y][z] = arr_v8[z]; 
      break; 
      } 
      } // Finally all 8 1x8 arrays stored into single 8x8 matrix 
     } 

希望這有助於,如果它不只是讓我知道,我很樂意提供幫助。

+0

謝謝。但是,我想以另一種方式。就像我想插入一列一列的值,比如arr_v1應該是矩陣的第一列,arr_v2應該是第二列等等,這樣arr_v8應該是第8列。 – bijlikamasla 2011-02-15 18:09:31

0
char matrix[8][8]; 
char *arr[8] = {arr_v1, arr_v2, arr_v3, arr_v4, arr_v5, arr_v6, arr_v7, arr_v8}; 
for(int y=0;y<8;y++) { 
    for (int i = 0; i < 8; ++i) { 
     matrix[y][i] = arr[i][y]; 
    } 
}