翻转句子中单词的顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内的字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和简单字母一样处理。

举例:输入"I am a student.",则输出"student. a am I"。

答:每个单词先自我翻转,然后整个句子翻转。

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace  std;

/*
                  翻转
 I am a student.  --> student. a am I

*/

void swap(string *str, int begin, int end)
{
    while (begin < end)
    {
        char ch = str->at(begin);
        str->at(begin) = str->at(end);
        str->at(end) = ch;
        begin++;
        end--;
    }
}

void Reverse(string *str)
{
    int length = str->size();
    if (NULL == str || length <= 0)
    {
        return;
    }
    int begin = -1;
    int end = -1;
    for (int i = 0; i < length; i++)
    {
        if (-1 == begin && str->at(i) == ' ')
        {
            continue;
        }
        if (-1 == begin)
        {
            begin = i;
        }
        if (str->at(i) == ' ')
        {
            end = i - 1;
        }
        else if (i == length - 1)
        {
            end = length - 1;
        }
        else
        {
            continue;
        }
        swap(str, begin, end);
        begin = -1;
        end = -1;
    }
    swap(str, 0, length - 1);
}

int _tmain(int argc, _TCHAR* argv[])
{
    char chArr[100] = {"I am a student."};
    string str(chArr);
    cout<<str<<endl;
    Reverse(&str);
    cout<<str<<endl;
    return 0;
}

运行界面如下:

posted @ 2012-08-25 10:02  venow  阅读(279)  评论(0编辑  收藏  举报