2009-06-18 65 views
0

,如果我想的閱讀使用PTR

char boo[] = 
    "abcd" 
    "efgh" 
    "ijkl" 
    "mnop"; 

行打印列我與

for(i = 0; i < 4; i++) 
{ 
    char row[] = ""; 
    for(j = 0; j < 4; j+) 
    printf("%c", *(boo++)) 
    putchar('\n'); 
    puts(row); 

} 

去我的問題是我怎麼能打印的列,所以我得到
aeim
bfjn
cgko
dhlp

+1

行變量的用途是什麼?爲了清楚起見,你最好把它拿出來。 – qrdl 2009-06-18 19:47:21

+0

@qrdl查看是否有任何行或列中的單詞。再次,我無法控制如何聲明boo []。我可以將boo []轉換爲2D char數組,但試圖找到更好的方法。 – 41104 2009-06-18 19:55:51

回答

2

因爲它看起來像一個家庭作業,我只是給你一個線索。

boo不是字符串數組 - 預處理膠水所有相鄰的字符串文字成一個字符串,所以你得到了一個字符串「abcdefghijklmnop

你需要將其申報爲

char *boo[] = {"abcd", "efgh", ...}; 
+0

@qrdl -thanks,但我真的沒有控制如何decola boo [] – 41104 2009-06-18 19:51:57

+1

這是一個不同的故事 - 你需要打印0,4,8,12,然後1,5,9,13等字符串中的字符。你明白了嗎? – qrdl 2009-06-18 19:53:39

1
#include <stdio.h> 

int main (int argc, char* argv[]) 
{ 
    char *boo[] = {"abcd", "efgh", "ijkl", "mnop"}; 
    int i, j; 

    for(i = 0; i < 4; i++) { 
     for(j = 0; j < 4; j++) 
      printf("%c", boo[j][i]); 

     printf("\n"); 
    } 
} 

-m

2

其他解決方案涉及到修改boo,你說這是違反規則的,這裏是一個簡單的解決方案。只需使用一個內部循環打印每個相對於外部循環的第四個字符。

int main() { 
    int i, j; 
    for(i = 0; i < 4; ++i) { 
     for(j = 0; j < 4; ++j) { 
      putchar(boo[i + j * 4]); 
     } 
     putchar('\n'); 
    } 
} 

想想這樣,這是有效地手動對待boo,就好像它是一個二維字符數組。由於用2d索引1d數組的公式是(x + y * width),所以可以設想我是x座標,j是y座標。