2 qq 39301152 qq_39301152 于 2017.08.31 20:35 提问

关于语句倒置 部分理解 c语言实现的
 #include <stdio.h>
#include <string.h>
void output(char *str)
{
  char* tail = strchr(str,' ');

  if (tail == NULL)
    printf("%s",str);
  else
    {

      output(tail + 1);

      *tail = '\0';
      printf(" %s",str);
    }
}
int main()
{
  char str[81];
  gets(str);
  output(str);
  putchar('\n');
  return 0;
}

output(tail + 1);

  *tail = '\0';
  printf(" %s",str);这一段一直没有理解 能否讲解一下

5个回答

Kinship_Jade
Kinship_Jade   2017.08.31 22:19
已采纳

感觉这是个递归,检测到空格就会向后移继续检测,直到检测完最后一个单词,打印出来才会回到上一级,也就是倒数第二个单词,以此类推,也就把所有的单词都倒过来打印了

qwe15954250805
qwe15954250805   2017.09.01 08:49

因为are和how之间是空格而不是字符结束符,不加字符结束符的话printf无法输出字符串

chj1234chj
chj1234chj   2017.08.31 20:47

*tail = '\0';就是使str这个字符串加上结尾标志,不然输出的话会有乱码,第二句就是把字符串str的内容输出

qq_39301152
qq_39301152 那比如说我输入how are you 输入应该是you are how 我就不明白are 怎么出来的 我理解了how怎么出来的 are一直想不明白
3 个月之前 回复
qq_40052477
qq_40052477   2017.08.31 21:02

c中字符串末尾都要是\0结束.
执行到最后,tail已经 是最后一个指针的位置了,需要把他置成0,这样再下面输出的时候,就知道到那个字节结束了

qq_39301152
qq_39301152 那比如说我输入how are you 输入应该是you are how 我就不明白are 怎么出来的 我理解了how怎么出来的 are一直想不明白
3 个月之前 回复
qq_38204686
qq_38204686   2017.08.31 21:24

不理解 一步一步调试就好了

Csdn user default icon
上传中...
上传图片
插入图片