垂直/水平翻转2d阵列

时间:2016-04-08 04:07:47

标签: c arrays

这可能被认为是一个低调问题。然而,我还没有找到任何代码,或者在我的编程语言中讨论如何解决这个问题的任何论坛,C。已经做了很多尝试,并且所有这些都最终实现了#34; hard-coding&#34 ;新阵列。

我试图垂直,然后水平翻转一个二维数组。 这似乎很容易,只是系统地进行并操纵每一行和列值。但是,如果我想要一个不仅仅是一个基本的3x3阵列的阵列,该怎么办呢?如11x11,或15x15?

**CODE SNIPPET:**

int array[3][3]= { {1,2,3},
                   {4,5,6},
                   {7,8,9} };

int vertFlip[3][3],
    horzFlip[3][3]; 

for(i = 0; i < rows; i++)
{
  for(j = 0; j < cols; j++)
  {
     vertFlip[0][i]= array[2][i];
     vertFlip[1][i]= array[1][i];
     vertFlip[2][i]= array[0][i];   
  }
} //and so on for horizontal, obviously my nested for loop was different. 

但是,如果这个数组更大,(123x123大小的数组)有什么人知道完成这项任务的有效方法呢?

3 个答案:

答案 0 :(得分:1)

我会从一个简单的方法开始。对于水平翻转:

int swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp; 
}

void FlipRow(int *row, int columns)
{
    // A row is a simple one dimensional array
    // just swap item 0 with item n-1, 1 with n-2, ...
    for (int index = 0; index < columns / 2; index++)
    {
        swap(row+index, row+columns-1-index);
    } 
}

void HFlipArray(int **array, int columns, int rows)
{
    for (int row = 0; row < rows; row++)
    {
        FlipRow(array[row], columns);
    }
}

对于垂直翻转,使用类似的方法:

// Reuse swap
void FlipColumn(int **array, int column, int rows)
{
    // Flip column 'column' of an array that has n rows.
    for (int row = 0; row < rows/2; row++)
    {
        swap(array[row]+column, array[rows-1-row]+column);
    }
}

void VFlipArray(int **array, int columns, int rows)
{
    for (int column = 0; column < columns; column++)
    {
        FlipColumn(array, column, rows);
    }
}

请注意,上面的代码会更改输入的内容。如果不需要,可以修改代码以传入目标和源数组,并相应地调整循环。

答案 1 :(得分:0)

你好那里你可以尝试一种简单的方法来翻转你的2d数组: -

int ar[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j,ar1[3][3];
for(i = 0;i<3;i++)
{
    for(j=0;j<3;j++)
    {
       ar1[i][j] = ar[j][i];
    }
}

正如您所看到的,您只需要循环遍历数组长度并进入循环ar1[i][j] = ar[j][i]执行翻转操作。

答案 2 :(得分:0)

模板解决方案

适用于dboption-01beforeschemasize-20200710-092914_A_IS_CRB-CDS.sql dboption-01beforeschemasize-20200710-092914_A_IS_CRB-CDT.sql dboption-01beforeschemasize-20200710-092914_PDA-CDS.sql dboption-02beforetablesize-20200710-092914_A_IS_CRB-CDS.sql dboption-02beforetablesize-20200710-092914_A_IS_CRB-CDT.sql dboption-02beforetablesize-20200710-092914_PDA-CDS.sql dboption-03create_table-20200710-092914_A_IS_CRB-CDS.sql dboption-03create_table-20200710-092914_A_IS_CRB-CDT.sql dboption-03create_table-20200710-092914_PDA-CDS.sql dboption-01beforeschemasize-20200710-092914_A_IS_CRB-CDS.sql dboption-02beforetablesize-20200710-092914_A_IS_CRB-CDS.sql dboption-03create_table-20200710-092914_A_IS_CRB-CDS.sql dboption-01beforeschemasize-20200710-092914_PDA-CDS.sql dboption-02beforetablesize-20200710-092914_PDA-CDS.sql dboption-03create_table-20200710-092914_PDA-CDS.sql dboption-01beforeschemasize-20200710-092914_A_IS_CRB-CDT.sql dboption-02beforetablesize-20200710-092914_A_IS_CRB-CDT.sql dboption-03create_table-20200710-092914_A_IS_CRB-CDT.sql int,...

的数组
float