2009-06-18 63 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坐标。