2012-02-24 198 views
1

我有一個二維(3x7)數組,我想轉換成一維數組,使得我提供的行位於中心。該行的值可能會不一樣,但它必須位於中心。將二維數組轉換爲一維數組(有條件)

#define numRows 3 
#define numCols 7 
#define TotalNum 21 

int arr[numRows-1][numCols-1] = 
        { {0,1,2,3,4,5,6}, {7,8,9,10,11,12,13}, {14,15,16,17,18,19,20} }; 
int stack[TotalNum-1]; 

stackup(arr,stack,row); 

void stackup(int *p,int *s,int &row1) 
{  
    int k =0; 
    for(int i = 0; i<numRows; i++) 
    {   
     for(int j = 0; j<numCols; j++) 
     {   
      s[k] = p[i][j]; 
      k++; 
     }    
    } 
} 

功能疊層肯定是錯誤的,需要進行調整,但我不知道如何調整它使得設置該行是在中心時推入堆棧。

+0

那麼,你必須擺脫你的數組聲明中的-1的一件事。 – 2012-02-24 16:43:40

+0

這是爲什麼呢? – lakesh 2012-02-24 16:50:10

+1

因爲'int arr [15];'聲明瞭一個15'int'的數組,所以最後一個容許索引是15的數組並不是一個。 – 2012-02-24 17:06:25

回答

1
#define numRows 3 
#define numCols 7 
#define TotalNum (numRows*numCols) 

void stackup(int **p,int *s,int row1) 
{  
    int k = 0,t; 
    int middle = (numRows-1)/2; 
    for (int i = 0; i<numRows; i++) { 
     t=i; 
     if (i==middle || i==row1) 
      i = (i==row1)?middle:row1; 
     for (int j = 0; j<numCols; j++) 
      s[k++] = p[i][j]; 
     i=t; 
    } 
} 

基本上從'p'逐行添加所有元素到's'。當到了中間行時,將添加row1中的元素。當需要添加row1的元素時,將添加中間行的元素。