用C语言实现字符串逆序输出,程序如下。 我运行的结果是dlrow world,而不是标准的dlrow olleh,求改错

char*change(char*Input,longLen){char*p=Input;inti;for(i=0;i<Len;i++){*(Input+i)=*(p+L... char *change(char *Input,long Len)
{
char *p=Input;
int i;
for(i=0;i<Len;i++)
{
*(Input+i)=*(p+Len-1-i);
/*我的想法是将p指针从最后一个元素遍历到开头逐个传给Input的元素,实现Input的倒序。求教错在哪?*/
}

return Input;
}

void main()
{
char Input[]="hello world";
long Len=strlen("hello world");
change(Input,Len);
printf(Input);
}
展开
 我来答
戴静柏0Ep
2012-03-17 · TA获得超过1796个赞
知道小有建树答主
回答量:426
采纳率:0%
帮助的人:772万
展开全部
你写的逻辑有问题,你先把后面的覆盖前面的内容,导致前面的内容丢失了
比如,当i等于0的时候,把hello world最后的一个d写到了h的地方,字符串就变成了dello world,结果第一个字符h的丢失了,所以要先保存,然后交换2个字符
同时,并不需要遍历到最后面,只需遍历一半就可以实现,代码如下:
char *change(char *Input,long Len)
{
char *p=Input;
// int i;
// for(i=0;i<Len;i++)
// {
// *(Input+i)=*(p+Len-1-i);
// }
int i = 0;
int j = Len - 1;
char temp;

for ( ; i < j; ++i, --j)//只遍历一半,当i>=j的时候,说明已经交换过了,不需要再交换了
{
temp = Input[i];
Input[i] = Input[j];
Input[j] = temp;
}

return Input;
}
追问
嗯,我新建了个p指针指向Input,然后*(Input+i)=*(p+Len-1-i)运行,不就像把Input的备份倒一下覆盖Input吗,为什么只能覆盖一半,后面的就原样输出了。求解惑。我就想搞明白为什么不能从尾遍历到头,*(Input+i)=*(p+Len-1-i)有什么问题,谢谢
追答
很简单,
最开始是hello world
做第一个循环后变成:dello world
然后再循环4次后变成:dlrow world,这个时候i的值为5,p+Len-1-i指向中间的空格
然后再循环一次的时候,没有变化,还是dlrow world
你发现没有dlrow和world以中间的空格对称,然后你再往后循环的话,后面的字符串是不会再变了,因为对称的原因,w还是会拷贝到w,o拷贝到o
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
破罐破摔的大爷
2012-03-17 · 超过21用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:56万
展开全部
void change (char Input,long Len)
{
char *p=Input;
long i;
for(i=0;i<=Len;i++) /* 下面有Len-1了 */
{
Input+i=*(p+Len-1-i);
}
printf("%d",input);
void main()
{
char Input[]="hello world";
long Len=strlen("hello world");
change(Input,Len);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
200612xxx
2012-03-17 · 贡献了超过108个回答
知道答主
回答量:108
采纳率:0%
帮助的人:55.8万
展开全部
char *change(char *Input,char *out,long Len)
{
char *p=Input;
int i;
for(i=0;i<Len;i++)
{
*(out+i)=*(p+Len-1-i);
}
out[i] = 0;
return out;
}

void main()
{
char Input[]="hello world";
long Len=strlen("hello world");
char *out = new char[Len];
memset(out,0,sizeof(out));

change(Input,out,Len);
printf(out);
}
更多追问追答
追问
能不能把change函数的*out参数去掉啊,就用*Input返回值? 还有out[i]=0是什么意思?谢谢
追答
这个最好不要去。因为一个好的函数设计,输入,和输出是分开的。两者最好不要混在一起.input-输入,out存输出结果。至于out[i] = 0,数组要以'\0'结尾,0 和'\0'是等价。.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式