翻轉字符串(翻轉句子中的單詞)

題目描述
牛客最近來了一個新員工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;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章