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;
} 展开
输出格式:每个测试用例的输出占一行,输出倒序后的句子。
#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;
} 展开
1个回答
展开全部
p = str + k;//这里是取到数组的最后一位吗?——是,就是让p指向最后的那个'\0'。
while (1)//这个1是什么意思?——让while成为一个无限循环。
if ( p == str )//这里是什么意思?——如果p的值与str的值一样(指向了同一个目标),则执行if的“体”。
if (*p == ' ' && *(p+1) != ' ')//这里是什么意思?——如果p指向的目标是空格,而p+1指向的目标(即空格后面的一个字符)不是空格,则执行这个if的“体”。
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了,就输出第一个单词并结束循环。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询