一个简单的字符串倒序问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 08:36:25
#include<iostream>
using namespace std;

void main()
{
char a[]="abcdef";
char * q=a;
char *p=a;
cout<<p;
while (*p!='\0')
p++;
while(p>=a)
*(q++)=*(--p);//不知道是不是问题出在这里
while(q>a)
q--;

cout<<q;

}
最后输出结果为“abcdeffeddef”
请高手指点
一楼的答案也是错误的
ch = *q;
*q = *p;
*p = ch;
p--;
q++
之后p的内容也随之改变,out q为“abcdefcba”
为什么会这样,期待高手解答,谢谢

//StringT.c
//Author:pig@ubuntu
//Date:2009-6-7
#include <stdio.h>
#include <stdlib.h>

int main()
{
char a[]="abcdef";
char *q=a;
char *p=a;
char temp;
printf("%s\n",p);
while (*p!='\0')
p++;
p--;//将p指向'\0'前一元素,'\0'不应参与倒序(*******)
while(p>=q)(*******p应与q比较)
{
temp=*q;
*q=*p;
*p=temp;//利用temp将*p与*q交换(**********)
p--;
q++;
}
while(q>a)
q--;
printf("%s\n",q);
return 0;
}
运行结果:
pig@pig-laptop:~$ gcc StringT.c
pig@pig-laptop:~$ ./a.out
abcdef
fedcba
/*涉及到字符串必须要考虑到'\0'元素,另外《c++沉思录》中建议:最好不要用指针^_^偶是菜鸟*/

/*while(p>=a)
*(q++)=*(--p);//不知道是不是问题出在这里
*/换为:
p--;
while (p > q) {
ch = *q;
*q = *p;
*p = c