C挑战中的循环:可以用另一种方式完成吗?

时间:2010-12-02 03:48:24

标签: c algorithm loops

大家都是C专家(请不要拍,我不再是C程序员,但我不时会有一个问题出现在我脑海中)

我正在阅读另一个问题(How to print an entered string backwards in C using only a for loop)。

“最简单”和最合乎逻辑的答案是

for (x = end; x >= 0; --x) {
    printf("%c", word[x]);
}

但是我想知道是否没有办法实现相同的目标但是更接近原始的循环:

for (x = word[end]; x >= word[0]; x--) {
    printf("%c", x);
}

我不知道有足够的C来解决它,但我们不能使用数组指针来循环

char * wordp;
for(wordp = &word[end]; /*something*/; wordp--){\
   printf("%c", &wordp);
}

P.S。:我真的不在乎它是向前还是向后循环。

P.P.S:对不起,如果我在指针中犯了明显的C错误;在评论中指出它们,我将编辑它们。 ;)

杰森

4 个答案:

答案 0 :(得分:4)

绝对

char *wordp;

for(wordp = word + end; wordp >= word; wordp--){
   printf("%c", *wordp);
}

答案 1 :(得分:1)

for (x = word[end]; x >= word[0]; x--) {
    printf("%c", x);
}

不起作用,因为单词[end]相当于*(word + end)。它已被解除引用,因此x将被设置为最后一个char的值,并将循环直到它等于第一个char的char值。简而言之,没有任何意义。

尝试:

char * wordp;
for(wordp = (word + end); wordp >= word; wordp--){\
   printf("%c", *wordp);
}

请记住,数组只是指向其第一个项目的指针。

答案 2 :(得分:1)

你可以这样做:

    char * wordp;
    for(wordp = &word[end]; wordp >= word ; wordp--){\
            printf("%c", *wordp);
    }

答案 3 :(得分:1)

真正的程序员使用递归:

void revputs(char *s) {
  if (*s) { revputs(s + 1); putchar(*s); }
}