[英]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.