qq_39301152
Code1010
采纳率100%
2017-08-31 13:05 阅读 8.3k
已采纳

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

5
 #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;
}

*tail = '\0';
printf(" %s",str);这两句理解不出来 希望得到解答 谢谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • 已采纳
    Kinship_Jade Kinship_Jade 2017-08-31 14:25

    这是一个递归,检测到空格是就会向后移动,也就是这一句话去掉第一个单词再继续执行,还是这个方法,去掉现在的第一个单词,也就是把原来的第二个单词给去掉了!而且它的输出方式是在检测完最后一个单词之后,才会输出倒数第二个单词,然后再向后退一级打印出倒数第三个单词,以此类推知道打印出原句子的第一个单词,这样,也就把一句话倒过来打印了。另外,,不理解楼主为什么发两遍帖子。。

    点赞 2 评论 复制链接分享
  • Small_Mouse0 鼠小 2017-08-31 14:57

    【1】\0是字符串的结束符,,,
    【2】printf(" %s",str);,,str是个字符指针,,%s意思是输出字符串,,
    合起来就是,输入从str开头的字符串

    点赞 2 评论 复制链接分享
  • qq_38204686 das白 2017-08-31 13:29

    *tail = '\0'; 你找到空格以后 要输出空格前的字符串需要把空格变为结束符 才能准确输出
    具体一步一步调试 看它的值是如何变化的

    点赞 1 评论 复制链接分享
  • weixin_40053007 56465165131 2017-08-31 14:15

    '\0'; 你找到空格以后 要输出空格前的字符串需要把空格变为结束符 才能准确输出
    具体一步一步调试 看它的值是如何变化的

    点赞 1 评论 复制链接分享
  • Mr_cuiwei 崔伟 2017-08-31 17:38

    '\0'的意思是 ASCII 为 0 的字符。
    它所的意义是“字符串结束符”。'%s'
    格式是字符串,不超过20个字符

    点赞 评论 复制链接分享
  • wdlinux66 wdlinux66 2017-08-31 19:46

    它所的意义是“字符串结束符”。'%s'
    格式是字符串,不超过20个字符

    点赞 评论 复制链接分享
  • qq_39301152 Code1010 2017-09-01 00:39

    谢谢各位 调试后 理解了

    点赞 评论 复制链接分享

相关推荐