反转字符串

abaloon99 2013-02-08 02:58:58

#include <stdio.h>
#include <stdlib.h>

void reverse( char* str )
{
char temp;
char *end = str;

printf( "Original string is: %s\n", str );
while( *end )
{
end++;
}
end--;

while( str < end )
{
temp = *str;
*str = *end;
str++;
*end = temp;
end--;
}

printf( "Reversed string is: %s\n", str );
return;
}


int main( void )
{
char str[] = "abcd";
reverse( str );
system( "pause" );
return 0;
}

请问,上面这个反转字符串的程序,为什么输出是

谢谢!
...全文
431 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyzsky 2013-02-08
  • 打赏
  • 举报
回复
没有保存原先的字符串指针,str已经改变了!
dubiousway 2013-02-08
  • 打赏
  • 举报
回复
其实就 一点:你程序的输出语句放错位置了 #include <stdio.h> #include <stdlib.h> void reverse( char* str ) { char temp; char *end = str; printf( "Original string is: %s\n", str ); while( *end ) { end++; } end--; while( str < end ) { temp = *str; *str = *end; *end = temp; str++; end--; } //不要在这里输出。你这里输出的str,不是原字符数组的首地址 return; } int main( void ) { char str[] = "abcd"; reverse( str ); printf( "Reversed string is: %s\n", str ); system( "pause" ); return 0; }
newtee 2013-02-08
  • 打赏
  • 举报
回复
你的程序这样就可以发现哪里有问题了

因为你的str++ 最后指针指的位置已经改变
正确做法
char* strrev(char* s)  
{
/* h指向s的头部 */
char* h = s;
char* t = s;
char ch;

/* t指向s的尾部 */
while(*t++){};
t--; /* 与t++抵消 */
t--; /* 回跳过结束符'\0' */

/* 当h和t未重合时,交换它们所指向的字符 */
while(h < t)
{
ch = *h;
*h++ = *t; /* h向尾部移动 */
*t-- = ch; /* t向头部移动 */
}

return(s);
}
东大坡居士 2013-02-08
  • 打赏
  • 举报
回复

void reverse( char* str )
{
    char * out = str;
    char temp;
    char *end = str;
 
    printf( "Original string is: %s\n", str );
    while( *end )
    {
        end++;
    }
    end--;
 
    while( str < end )
    {
        temp = *str;
        *str = *end;
        str++;
        *end = temp;
        end--;
    }
 
    printf( "Reversed string is: %s\n", out);
    return;
}
bluewanderer 2013-02-08
  • 打赏
  • 举报
回复
反转的过程中str已经变了,反转之前保存一下原来的str,输出的时候用那个输出。

70,032

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧