Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đảo Ngược Các Từ Trong Chuỗi Trong C++


Giả sử chúng ta có một chuỗi chứa vài từ. Chúng ta phải đảo ngược vị trí các từ trong chuỗi. Ví dụ: "The quick brown fox jumps over a lazy dog" → "dog lazy a over jumps fox brown quick The".

Để giải quyết, chúng ta làm theo các bước:

  • Định nghĩa hàm getString(s): loại bỏ dấu cách thừa ở đầu/cuối và giữa các từ.

  • Định nghĩa hàm reverseWordss(s): đảo ngược từng từ riêng lẻ.

  • Từ phương thức chính: đảo ngược toàn bộ chuỗi s, gọi reverseWordss(s), trả về getString(s).

Ví dụ (C++)

Hãy xem triển khai sau để hiểu rõ hơn:

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    string reverseWords(string s) {
        reverse(s.begin(), s.end());
        reverseWordss(s);
        return getString(s);
    }
    string getString(string s){
        int i = 0;
        int j = s.size() - 1;
        while(s[i] == ' ' && i < s.size()) i++;
        while(j >= 0 && s[j] == ' ') j--;
        string ret = "";
        for(; i <= j; i++){
            if(ret.size() && ret.back() == ' ' && s[i] == ' ') continue;
            ret += s[i];
        }
        return ret;
    }
    void reverseWordss(string& s){
        int j = 0;
        for(int i = 0; i < s.size() ; i = j){
            if(s[i] == ' '){
                j = i + 1;
            } else{
                while(j + 1 < s.size() && s[j + 1] != ' ') j++;
                int x = i;
                int y = j;
                while(x < y){
                    swap(s[x], s[y]);
                    x++;
                    y--;
                }
                j++;
            }
        }
    }
};

int main(){
    Solution ob;
    cout << (ob.reverseWords("The quick brown fox jumps over a lazy dog"));
}

Đầu vào

"The quick brown fox jumps over a lazy dog"

Đầu ra

"dog lazy a over jumps fox brown quick The"