反转单词

将字符串进行如下反转: 如果字符串为 how are you

则反转为  you are how

也就是单词反转,但是每个单词内部不变。


两个解法,第一个是根据空格把每个单词弄出来,保存起来,然后反转就好了

第二种,先反转整个句子,之后,再对每个单词在进行一次反转。

代码如下:

#include <iostream>
#include <string>
#include <cassert>
using namespace std;

void reverseRange(char* str,int begin,int end)
{
    assert(str != NULL);
    assert(begin>=0);
    assert(end<=strlen(str)-1);
    if(begin>=end)
        return;
    while(begin<=end)
    {
        char temp = str[begin];
        str[begin] = str[end];
        str[end] = temp;
        begin++;
        end--;
    }
    return;
}

void reverseString(char* str)
{
    assert(str!=NULL);
    reverseRange(str,0,strlen(str)-1);
    //循环中begin = end+2,为了使循环保持一致,end从-2开始
    int begin=0,end=-2; 
    int i=0; 
    for(i=0; i<strlen(str); i++)
    {
        // i指向空格,那么前一个单词的结尾为i-1
        // 下一个单词的开头为i+1
        if (str[i]==' ')
        {
            begin = end+2;
            end = i-1;
            reverseRange(str,begin,end);
        }
    }
    begin = end+2;
    end = strlen(str)-1;
    reverseRange(str,begin,end);
    return;
}


int main(int arrgc, char* argv[])  
{  
    char* p = "hello world !";
    char* str = (char*)malloc(sizeof(char)*(strlen(p)+1));
    strcpy(str,p);
    reverseString(str);
    cout<<str;
free(str);
return 0; }
posted @ 2012-10-29 00:38  三更_雨  阅读(1648)  评论(0编辑  收藏  举报