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

Đảo ngược các nguyên âm trong chuỗi bằng C++


Cho một chuỗi, nhiệm vụ là đảo ngược thứ tự các nguyên âm (vowels) trong chuỗi, các phụ âm giữ nguyên vị trí. Ví dụ:

Đầu vào 1: "tutor" → Đầu ra: "totur" (u, o → o, u).

Đầu vào 2: "mathematics" → Đầu ra: "mithametacs" (a, e, a, i → i, a, e, a).

Phương pháp: Two Pointers (Hai con trỏ)

Sử dụng hai con trỏ low (đầu) và high (cuối). Di chuyển low về phải cho đến khi gặp nguyên âm, di chuyển high về trái cho đến khi gặp nguyên âm. Hoán đổi hai ký tự đó. Lặp lại cho đến khi low >= high.

  • Hàm isVowel(char) kiểm tra nguyên âm (cả chữ hoa/thường).
  • Hàm reverseVowel(string &) thực hiện đảo ngược tại chỗ.

Ví dụ mã nguồn

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

bool isVowel(char ch) {
    return ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u'||
           ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U';
}

string reverseVowel(string &s) {
    int low = 0, high = s.size() - 1;
    while (low < high) {
        while (low < high && !isVowel(s[low])) low++;
        while (low < high && !isVowel(s[high])) high--;
        swap(s[low++], s[high--]);
    }
    return s;
}

int main() {
    string a = "tutorialspoint";
    cout << reverseVowel(a);
    return 0;
}

Kết quả

titorailspount

Chuỗi "tutorialspoint" sau khi đảo ngược nguyên âm thành "titorailspount".