1. 程式人生 > >翻轉單詞順序列

翻轉單詞順序列

div 內容 數組越界 找單詞 單詞 item n-1 word student

題目描述

牛客最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這家夥原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麽?

class Solution {
public:
    //void swap()
    
    void Reversesub(string &str,int a,int b){
        while(a<b)
            swap(str[a++],str[b++]);
    }
    
    string ReverseSentence(string str) {
        int n=str.size();
        Reversesub(str,0,n);
        
        int i=0;
        int a=0,b=0;
        while(i<n) {
            while(i<n && str[i]==‘ ‘)
                i++;
            a=b=i;
            while(i<n && str[i]!=‘ ‘) {
                i++;
                b++;
            }
            Reversesub(str,a,b-1);
        }
        return str;
    }
};

  

不通過 您的代碼已保存
段錯誤:您的程序發生段錯誤,可能是數組越界,堆棧溢出(比如,遞歸調用層數太多)等情況引起 原來是部分程序寫錯。
class Solution {
public:
    //void swap()
    
    void Reversesub(string &str,int a,int b){
        while(a<b)
            swap(str[a++],str[b--]);
    }
    
    string ReverseSentence(string str) {
        int n=str.size();
        Reversesub(str,0,n-1);
        
        int i=0;
        int a=0,b=0;
        while(i<n) {
            while(i<n && str[i]==‘ ‘)
                i++;
            a=b=i;
            while(i<n && str[i]!=‘ ‘) {
                i++;
                b++;
            }
            Reversesub(str,a,b-1);
        }
        return str;
    }
};

  

class Solution {
public:
void ReverseWord(string &str, int s, int e)
    {
        while(s < e)
            swap(str[s++], str[e--]);
    }
 
    string ReverseSentence(string str) {
        ReverseWord(str, 0, str.size() - 1); //先整體翻轉
        int s = 0, e = 0;
        int i = 0;
        while(i < str.size())
        {
            while(i < str.size() && str[i] == ‘ ‘) //空格跳過
                i++;
            e = s = i; //記錄單詞的第一個字符的位置
            while(i < str.size() && str[i] != ‘ ‘) //不是空格 找單詞最後一個字符的位置
            {
                i++;
                e++;
            }
            ReverseWord(str, s, e - 1); //局部翻轉
         }
        return str;
    }
}; 

  

翻轉單詞順序列