C语言例题 说反话,求大佬帮我解释一下?

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个... 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。
#include <stdio.h>
#include <string.h>

char str[81];

int main()
{
int i, k;
char *p;
gets(str);
k = strlen(str);
p = str + k; //这里是取到数组的最后一位吗?
while (1)//这个1是什么意思?
{
if ( p == str )//这里是什么意思?
{
printf("%s\n", p);
break;
}
if (*p == ' ' && *(p+1) != ' ')//这里是什么意思?
{
*p = '\0';
printf("%s ", p+1);//这里为什么是p+1?
}
p--;
}
return 0;
}
展开
 我来答
White_MouseYBZ
2019-12-07 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6488万
展开全部
  1. p = str + k;//这里是取到数组的最后一位吗?——是,就是让p指向最后的那个'\0'。

  2. while (1)//这个1是什么意思?——让while成为一个无限循环。

  3. if ( p == str )//这里是什么意思?——如果p的值与str的值一样(指向了同一个目标),则执行if的“体”。

  4. if (*p == ' ' && *(p+1) != ' ')//这里是什么意思?——如果p指向的目标是空格,而p+1指向的目标(即空格后面的一个字符)不是空格,则执行这个if的“体”。

  5. printf("%s ", p+1);//这里为什么是p+1?——题目要求是只用“一个空格”隔开单词,那么既然前一句*p = '\0';使空格变为'\0'了,p+1不就是下一个字母元素(肯定是字母且是单词的开头)吗?

更多追问追答
追问
不好意思,我还是没有搞清楚这串代码是如何把一句话反着说出来的。。。
追答
比如说I am a student,放在数组中是I am a student\0,I在str[0],\0在str[k](因为k=strlen(str)求出了长度)。下面p = str + k;让p指向了str[k],然后p--,到*p==' '时p就指向了s前的那个空格,这时把这个空格换成了'\0',并输出p+1所指的字符串即student。p继续减1,到a前面又遇到了空格,又把这个空格换成'\0'并输出p+1的字符串即a。p继续减1,不断输出单词,直到p减至为str了,就输出第一个单词并结束循环。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式