题目描述
JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
#include <iostream>
#include <stack>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
class Solution {
public:
string ReverseSentence(string str) {
int len = 0;
int start = 0, end = 0;
int i = 0;
/* 先从头到尾逆序 */
convent(str,0,str.size() - 1);
/* 把空格再逆序 */
len = str.size();
for(i = 0; i < len; i++)
{
/* 跳过空格,可能开头,或者单词中间有很多空格 */
while(str[i] == ' ')
{
start++;
end++;
i++;
}
/* 判断下一个是否是空格,或者是结束 */
if(str[i+1] == ' ' || (i+1) == len)
{
end = i;
convent(str,start,end);
start = i+1;
end = i+1;
}
}
return str;
}
void convent(string& str,int start,int end)
{
char ch = 0;
while(start < end)
{
ch = str[start];
str[start] = str[end];
str[end] = ch;
start++;
end-- ;
}
}
};
int main()
{
Solution s;
string str;
str = "Ii am a student.";
cout << s.ReverseSentence(str) << endl;
return 0;
}