簡體   English   中英

沿C中2D數組的對角線讀取

[英]Reading along the diagonals of a 2D array in C

我目前有一個行和col大小為15的字符數組。我的目標是沿對角線讀取(最終在所有四個方向上讀取)並將值存儲在單獨的數組中。 單獨的數組有15列和30行,多余的值由空字符占用。

3x3陣列的簡單示例:

原始陣列:

A B C
D E F
G H I

新陣列:

A \0 \0
D  B \0
G  E  C 
H  F \0
I \0 \0

這是我編寫的代碼:

// DiagUpRight Array
int initDiagUpRightArray(char wordArray[], char diagUpRightArray[]){
    // First, initialize array with null characters
    int i = 0;
    int j = 0;
    for (i=0; i<wDiagRowSize; i++) {
        for (j=0; j<wDiagColSize; j++) {
            diagUpRightArray[i][j] = '\0';
        }
    }

    // Next, array ought to put each diagonal (from bottom-to-top, left-to-right) in a row
    int i = 0;
    int j = 0;
    int counter = 1;
    for (i=0; i<wDiagRowSize; i++) {
        for (j=0; j<wDiagColSize; j++) {
            if (counter % 2) {
                 //counter is an odd number
                 diagUpRightArray[i][j] = wordArray[i][j]; //placeholder 
                 counter++;
            } else {
                //counter is an even number
                diagUpRightArray[i][j] = wordArray[i][j]; //placeholder
                counter++;
            }
        }
    }

    return(EXIT_SUCCESS);
}

(我知道這段代碼不是很有效;我還是C和編程的新手。)

wDiagRowSize和wDiagColSize先前分別定義為30和15。

我知道我的問題出在帶有// placeholder注釋的兩行中,但是我不確定如何繼續。

我知道我的問題出在帶有// placeholder注釋的兩行中,但是我不確定如何繼續。

counter和奇/偶情況的區分是徒勞的。 任何狀況之下:

    int i, j, k;
    for (i=0; i<wDiagRowSize; i++)
    for (j=0; j<wDiagColSize; j++)
    diagUpRightArray[i][j] =
      i<wDiagColSize  &&                   j<=i              ? wordArray[i-j][j]
    : wDiagColSize<=i && (k=wDiagColSize-1-j)>i-wDiagColSize ? wordArray[k][i-k]
    : '\0';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM