关于语句倒置 部分理解 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个回答

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

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

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

qq_39301152
Code1010 那比如说我输入how are you 输入应该是you are how 我就不明白are 怎么出来的 我理解了how怎么出来的 are一直想不明白
大约 2 年之前 回复

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

qq_39301152
Code1010 那比如说我输入how are you 输入应该是you are how 我就不明白are 怎么出来的 我理解了how怎么出来的 are一直想不明白
大约 2 年之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!