0

やあみんな私はcで複数の2次元配列を連結したいのですが、これは2つだけ行うとどうなりますか?

配列 1

222222222222222222222
000000000001000000000
000000000001000000000
000000000001000000000
000000000001000000000
111111111111111111111

配列 2

222222222222222222222
000000000001000000000
000000000001000000000
000000000000000000000
000000000001000000000
111111111111111111111

私が欲しいもの

222222222222222222222222222222222222222222
000000000001000000000000000000001000000000
000000000001000000000000000000001000000000
000000000001000000000000000000000000000000
000000000001000000000000000000001000000000
111111111111111111111111111111111111111111

私が得るもの

222222222222222222222000000000001000000000
000000000001000000000000000000001000000000
000000000001000000000000000000000000000000
000000000001000000000000000000001000000000
000000000001000000000000111111111111111111
111111111111111111111111111111111111111111

連結する関数

 #define map_height 6
 #define map_length 21
 #define map_stage_length 5

char ** concatenate(){
    char **array=create2DCharArray(map_height,map_length*map_stage_length); 
    char **mapsarray[5]={create2DCharArray(map_height,map_length),
                        create2DCharArray(map_height,map_length),
                        create2DCharArray(map_height,map_length),
                        create2DCharArray(map_height,map_length),
                        create2DCharArray(map_height,map_length)}; 

int i=0,j=0,n=0;

mapsarray[0]=load_map("./resources/maps/map1.map");
mapsarray[1]=load_map("./resources/maps/map2.map");
mapsarray[2]=load_map("./resources/maps/map2.map");
mapsarray[3]=load_map("./resources/maps/map2.map");
mapsarray[4]=load_map("./resources/maps/map2.map");

for (i = 0; i < map_height; i++)
{
    for (n = 0; n < map_stage_length; n++)
    {
        for (j = 0; j < map_length; j++)
        {

            array[i][(n*map_length)+j]=mapsarray[n][i][j];
        }

    }

}

return array;   
  }

なぜそれが押し上げられるのか、何か考えがありますか?

4

2 に答える 2

1

このループを試してみてください。

for(i=0; i<map_stage_length; i++){ // for each 2d Array, ith array  
   for(r=0; r<map_height; r++){ // for each col
       for(c=0; c<map_length; c++) // for each row
          array[r][ (i*map_length) + c ]  = mapsarray[i][r][c] ;    
   }
}

i,j,k の代わりに適切な変数名を使用する

于 2013-01-28T20:09:03.587 に答える
0

これを簡単にデバッグするためのヒントを次に示します。最も外側のループを 'n' まで繰り返すようにします。それぞれmapsarray[n]が入力配列です。コードの残りの部分を、入力配列のデータを出力配列の正しい場所に書き込むだけの関数に分割します。あなたが最終的に望むのは次のようなものです:

for (i = 0; i < num_maps; ++i)
{
  concatenate_array(array, mapsarray[n], n);
}

そのアーキテクチャを使用すると、各入力で関数を個別に実行しconcatenate_array、データが書き込まれる場所を観察できます。これにより、配列インデックス演算またはループ境界条件を調整する必要がある場所がより明確になります。

于 2013-01-28T20:13:15.823 に答える