題目描述
牛客最近來了一個新員工Fish,每天早晨總是會拿着一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
/**
*翻轉整個句子
*/
void ReverseStr(string &str)
{
if(str.size()<=1) return ;
int low=0,high=str.size()-1;
while (low<high) {
char tmp=str[low];
str[low]=str[high];
str[high]=tmp;
low++;
high--;
}
}
/**
* 找到單個單詞進行旋轉
* (1)先是找空格
* (2)沒有空格情況
*/
string ReverseSentence(string str){
if(str.size()<=1) return str;
string resu;
//首先進行整個句子進行旋轉
ReverseStr(str);
int low=0;
//進行單詞旋轉
//每遇到一個空格就是一個單詞使用strsub進行截取
for(int i=0;i<str.size();i++){
if(str[i]==' '){
string tmp=str.substr(low,i-low);
ReverseStr(tmp);
resu+=tmp;
resu+=" ";
low=i+1;
}
}
//沒有空格
string tmp=str.substr(low,str.size());
ReverseStr(tmp);
resu+=tmp;
return resu;
}
int main(int argc, char *argv[])
{
string str="student. am I"; //對整個句子進行翻轉
//ReverseStr(str);
string resu;
resu=ReverseSentence(str);
cout<<resu;
cout<<endl;
return 0;
}