2013-11-22 35 views
0

井的Ive試圖編輯的陣列的元件,以便讓我們假設我們有一個二維數組編輯二維數組內的一系列元素?

所以 2D陣列9×9;

 for(... ... ... ++) 
     { 
      for(.. ... ...++){} 
     } 

可以說,該代碼將使用另一組的for循環來顯示2D陣列它的一個簡單陣列沒有任何幻想

       00000000 
           00000000 
           00000000... 

所以,如果我想顯示從元素的E [1 ] [0]到[2] [3]我該怎麼做?

   00000000 
       eeeeeeee 
       eeee0000 
       00000000 

什麼,我腦子裏想的是一樣的東西,而(X < Y) {陣列[X ++] [Y];} 但這個想法似乎沒有工作。 很樂意接受任何幫助。 thx

for(int i=0; i<9; i++) //This loops on the rows. 
{ 
    for(int j=0; j<9; j++) //This loops on the columns 
    { 
     board[i][j] = grid; // set the array to the char on grid '0'. 
    } 
} 
board[s_col][s_row] = 'Z'; 
while(s_col < e_col)//s_col is the start of the rows and columns 
    //{ 
    //if(s_col != e_col) 
{ 
    ++s_col; 
    board[s_col][s_row]; 
} 
//} 
//cout << board[s_col][s_row++] <<endl; 

// display the array 
for(int i=0; i<9; i++) //This loops on the rows. 
{ 
    for(int j=0; j<9; j++) //This loops on the columns 
    { 
     cout << board[i][j] << " "; 
    } 
    cout << endl; 
} 
+0

對於初學者,您可能希望讓代碼更加具體!不過,我已經可以評論的一件事是,C++更喜歡preincrement而不是postincrement,儘管它的名字(儘管它對你的問題無關緊要)。 –

+0

thx kuhl。我有++ s_col;我沒有使用它; p。至於更多的代碼在這裏是新的,所以每行之間使用8個空格是痛苦的。如果有一種簡單的方法,我不知道它 – user2316289

+0

你只需要開始每行代碼4空格,然後正常縮進(我不知道什麼標籤做,但你不應該使用標籤)。任何中途體面的編輯器都可以讓你在每行前面插入4個空格,例如,我使用':%s/^'/''''''''''''。 –

回答

1

你在正確的軌道與方法上:

for(... ... ... ++) 
    { 
     for(.. ... ...++){} 
    } 

下面是一些代碼,應該可以幫助您:

#include <stdio.h> 
#include <memory.h> 

#define MAX_ROW 4 
#define MAX_COL 8 

void fillRange(char fillChar, int startRow, int startCol, int count); 

char myArray[MAX_ROW][MAX_COL]; 
void printArray(); 

int main(int argc, char *argv[]) 
{ 

    memset(myArray, '0', sizeof(myArray)); 

    printf("\nBefore:\n"); 
    printArray(); 
    fillRange('e', 1, 0, 12); 
    printf("\nAfter:\n"); 
    printArray(); 

} 

void fillRange(char fillChar, int startRow, int startCol, int count) 
{ 
    int i, j, filledChars = 0; 

    for(i = startRow; i < MAX_ROW; i++) 
    { 
    for(j = startCol; j < MAX_COL; j++) 
    { 
     myArray[i][j] = fillChar; 
     if(++filledChars == count) 
     return; 
    } 
    } 
} 

void printArray() 
{ 
    int i, j; 

    for(i = 0; i < MAX_ROW; i++) 
    { 
    for(j = 0; j < MAX_COL; j++) 
     putchar(myArray[i][j]); 
    printf("\n"); 
    } 

} 

如果你不是想在陣列中的一個特定點結束那麼你只需要改變觸發返回的條件。

0

這是衆多原因之一,爲什麼越多編碼越傾向於避免二維數組。您可以使用像這樣的一維數組:board[i][j] == board_1D[i*num_columns+j]。這也意味着你可以在一個for循環中循環遍歷整個電路板。

現在您只需計算您的e範圍的開始和結束索引,並簡單測試您的計數器是否在該範圍內。換句話說,您在最內層循環中有一個if聲明。

您當然可以將您的i,j二維指數轉換爲等效的一維指數並採取相同的方法。 index_1D = i*9+j;

我會把代碼留給你。

0

處理一系列相鄰的值是最容易的,當你有一個基礎連續數組,並且你不需要處理雙重索引(請參閱Adam的回答)。然而,在你的簡單的情況下,它也相當可行的:

你會初始化rowcolumn變量與起始行和列(在你的情況01)。然後,您隨着column走,直到您到達目標列(2)您位於目標行(3)或者您到達矩陣的末尾,在這種情況下,您將該列設置爲0並遞增row