求助C/C++指针高手解惑!!!

/*编写一个程序,按照相反的单词顺序显示命令行参数。即,如果命令行参数是seeyoulater,程序的显示应该为lateryousee。#include<stdio.h>... /*编写一个程序,按照相反的单词顺序显示命令行参数。
即,如果命令行参数是see you later,程序的显示应该为later you see。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char str[81];
char *p, temp;
int i,n,length;
gets(str);
for (p = str,i=0,n = strlen(str); i<n/2; i++)//将整个字符串倒序
{
temp = *(p+n-1-i);
*(p+n-1-i) = *(p+i);
*(p+i) = temp;
}
puts(str);
p = str;
length=0;
do //将字符串中的每个单词倒序(用到上一次输出,例如原来输入为abc def)
{ //上次输出为fed cba ,则该段输出则为 def abc
if( isalpha(*p) ) //当不是空格,即还是那个单词时
{
length++;
}
else
{
if(length>1)
for(i=0; i<length/2; i++)
{
temp = *(p-1-i); //???意思
*(p-1-i) = *(p-length+i);
*(p-length+i) = temp;
}
length = 0;
}
}while(*p++ != '\0'); //每执行完一次P+1
puts(str);
return 0;
}

下面是什么意思???

for(i=0; i<length/2; i++)
{
temp = *(p-1-i); //???意思
*(p-1-i) = *(p-length+i);
*(p-length+i) = temp;
}
//???这些是什么意思?一开始时P不是就是只指向了str
的首地址的吗?他*(p-1-i);还减一??可以减??那她会减后到底还会只想哪里??
还有的是这几句是什么意思?希望高手可以详细解答,谢谢~~~~
展开
 我来答
1998494949
2011-08-18
知道答主
回答量:83
采纳率:0%
帮助的人:37.8万
展开全部
我奇怪的是 see you later,程序的显示应该为later you see。并没有将每个单词倒序啊。
而且代码里面处理的也不是命令行参数,而是读取了一个 字符串进去啊。 p是指向了一个单词的最后一个字符的下一个
这几句的意思就是把一个单词的顺序颠倒
*(p-1-i)是单词的最后一个char
*(p-length+i);是单词的第一个char
首尾颠倒,直到最中间就是把整个单词颠倒了 ....
do //执行到这里时,p仍指向str首地址
{
if( isalpha(*p) ) //先做这个判断 *p不是空格,length自增1后,注意while里p++
{
length++;
}
else //以fed cba为例,此时p指向的是d c间的空格
{
if(length>1)
for(i=0; i<length/2; i++)
{
temp = *(p-1-i); //首次循环时i=0; *(p-1)=d ;以fed cba为例
*(p-1-i) = *(p-length+i);
*(p-length+i) = temp;
} //for循环是交换fed为def
length = 0;
}
}while(*p++ != '\0'); //每执行完一次P+1,注意while里的判断!!! see you later为length=3
for(i=0; i<length/2; i++)// i<length/2也就是i<3/2最后 i<1
{
temp = *(p-1-i); //???意思先取出单词see 存在temp中 temp =see
*(p-1-i) = *(p-length+i); //将later存在第一个位置
*(p-length+i) = temp; //将原第一个位的单词see存到第三个位置,第二个单
laimuhui
2011-08-18 · TA获得超过331个赞
知道小有建树答主
回答量:606
采纳率:0%
帮助的人:235万
展开全部
see you later为length=3
for(i=0; i<length/2; i++)// i<length/2也就是i<3/2最后 i<1
{
temp = *(p-1-i); //???意思先取出单词see 存在temp中 temp =see
*(p-1-i) = *(p-length+i); //将later存在第一个位置
*(p-length+i) = temp; //将原第一个位的单词see存到第三个位置,第二个单词不变
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tustnhs
2011-08-17 · TA获得超过1254个赞
知道小有建树答主
回答量:1084
采纳率:0%
帮助的人:687万
展开全部
p是指向了一个单词的最后一个字符的下一个
这几句的意思就是把一个单词的顺序颠倒
*(p-1-i)是单词的最后一个char
*(p-length+i);是单词的第一个char
首尾颠倒,直到最中间就是把整个单词颠倒了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fef0d61
2011-08-17
知道答主
回答量:17
采纳率:0%
帮助的人:4.3万
展开全部
....
do //执行到这里时,p仍指向str首地址
{
if( isalpha(*p) ) //先做这个判断 *p不是空格,length自增1后,注意while里p++
{
length++;
}
else //以fed cba为例,此时p指向的是d c间的空格
{
if(length>1)
for(i=0; i<length/2; i++)
{
temp = *(p-1-i); //首次循环时i=0; *(p-1)=d ;以fed cba为例
*(p-1-i) = *(p-length+i);
*(p-length+i) = temp;
} //for循环是交换fed为def
length = 0;
}
}while(*p++ != '\0'); //每执行完一次P+1,注意while里的判断!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tidus_forever
2011-08-17 · TA获得超过4399个赞
知道大有可为答主
回答量:2782
采纳率:100%
帮助的人:1860万
展开全部
我奇怪的是 see you later,程序的显示应该为later you see。并没有将每个单词倒序啊。
而且代码里面处理的也不是命令行参数,而是读取了一个 字符串进去啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式