如何在c中连接多个2d数组

时间:2013-01-28 19:51:47

标签: c arrays concatenation multidimensional-array

嘿伙计们,我想在c中连接多个2d数组,这就是当我只做两个时会发生什么,但如果我做的更多它的sume together.it似乎每个循环它灌满一个:

数组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;   
  }
你知道为什么会推高它吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这是一个提示,使调试更容易。使最外层循环遍历'n'。每个mapsarray[n]都是一个输入数组。将其余代码分解为一个函数,该函数只是将输入数组中的数据写入输出数组中的正确位置。你最终想要的是这样的:

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

使用该架构,您可以分别对每个输入执行concatenate_array函数,并观察数据的写入位置。这应该更明显地需要调整数组索引算法或循环边界条件。