字符串翻转?该怎么解决

字符串翻转?
本帖最后由 VisualEleven 于 2012-09-05 09:19:19 编辑
void Revese(char *str){  
  
    char *start=str,*end=str,*ptr=str; //开头,结尾,中间指针   
    while (*ptr++!='\0')  
    {  
        if (*ptr==' '||*ptr=='\0') //找到一个单词   
        {  
            end=ptr-1; //end指向单词末尾   
            while (start<end)  
                swap(*start++,*end--); //把单词的字母逆置   
            start=end=ptr+1; //指向下一个单词开头   
        }  
    }  
  
    start=str,end=ptr-2;//start指向字符串开头,end指向字符串末尾   
    while (start<end)  
    {  
        swap(*start++,*end--);  
    }  
}  
 end=ptr-1; //end指向单词末尾  ???是什么意思,start,end ptr 首先都指向字符串首地址??-1 应该是向前移动一个单位,怎么会指向单词末尾???????

------解决方案--------------------
void Revese(char *str){  
char *start=str,*end=str,*ptr=str; //开头,结尾,中间指针  
while (*ptr++!='\0')  
{  
if (*ptr==' '
------解决方案--------------------
*ptr=='\0') //找到一个单词  
{  
end=ptr-1; //end指向单词末尾  
while (start<end)  
swap(*start++,*end--); //把单词的字母逆置  
start=end=ptr+1; //指向下一个单词开头  
}  
}  

start=str,end=ptr-2;//start指向字符串开头,end指向字符串末尾  
while (start<end)  
{  
swap(*start++,*end--);  
}  
}

int main()
{
char str[] = "hello world";
Revese( str );
cout << str;
return 0;
}


当执行到“end=ptr-1; //end指向单词末尾 ”这一行时,ptr指向字符串中的空格。ptr-1指向它前面的一个字符,例子中即字母o。你说o是不是单词末尾啊?
引用楼主的发问:
start,end ptr 首先都指向字符串首地址??

初始化嘛,后来不是通过while (*ptr++!='\0')等语句重新赋值了吗?

------解决方案--------------------
end指向末尾,start指向开头,这样才能交换啊。

start,end ptr 首先都指向字符串首地址==开始扫描前,肯定都指向开头啊,随着交换的进行,这些指针都在改变位置的。
------解决方案--------------------
不是有现成的函数reverse()吗?
------解决方案--------------------
引用:
不是有现成的函数reverse()吗?

人家要hello world变成world hello
还有人要abc\r\ndef变成fed\r\ncba
还有人要您好好您
------解决方案--------------------