句子逆序

/ C++ / 没有评论 / 1930浏览
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void RevStr(char *str)
{
    int k = 0;
    int i = 0;
    int j = 0;

    if(str == nullptr)
    {
        return ;
    }
    int len = strlen(str);

//先对整体进行反转
    for(i = 0; i < len / 2; i++)
    {
        swap(str[i], str[len - i - 1]);
    }

//再对每个单词进行反转
    while(k < len)
    {
        i = j = k;
        while(str[j] != ' ' && str[j] != '\0')
        {
            j++;
        }
        k = j + 1;   //跳过空格
        for(j = j - 1; i < j; j--, i++)
        {
            swap(str[i], str[j]);
        }
    }
}
int main()
{
    char a[5000];
    cin.getline(a,5000);
    RevStr(a);
    cout<<a<<endl;
    return 0;
}