思路:先将字符串整体进行翻转,再对每个单词逐个翻转。
#include<iostream>
#include<string>
using namespace std;
//I am Student ==>Student am I 单词位置倒置,单词结构不变
void ReverseWord(string& str, int start, int end)
{
while (start < end)
{
char tmp = str[start];
str[start] = str[end];
str[end] = tmp;
++start;
--end;
}
}
//先整体反转,再逐单词反转
void ReverseStr(string& str)
{
int n = str.size();
int start = 0;
int end = n - 1;
if (n == 0)
return;
ReverseWord(str, start, end);//I am Student ==>tnedutS ma I
//以空格来翻转每个单词
while (start < n)
{
end = start;
while (str[end] != ' ' && end<n)
++end;
ReverseWord(str, start, end-1);
start = end + 1;
}
}
int main()
{
string str;
getline(cin, str);
ReverseStr(str);
cout << str << endl;
return 0;
}