Computer >> Máy Tính >  >> Lập trình >> C ++

Nguyên âm ngược của một chuỗi trong C ++

Cho một chuỗi, nhiệm vụ là đảo ngược tất cả các nguyên âm có trong chuỗi đã cho. Ví dụ:

Đầu vào-1 -

a = “tutor”

Đầu ra -

totur

Giải thích - Đảo ngược chuỗi “gia sư” sẽ tạo ra kết quả là “totur.

Đầu vào-2 -

a = “mathematics”

Đầu ra -

mithametacs

Giải thích - Đảo ngược chuỗi “toán học” sẽ tạo ra kết quả là “mithametacs”.

Phương pháp tiếp cận để giải quyết vấn đề này

Cho một chuỗi, chúng ta phải đảo ngược tất cả các nguyên âm có trong nó. Có một số cách tiếp cận để giải quyết vấn đề cụ thể này nhưng chúng ta phải giải quyết vấn đề này trong thời gian tuyến tính O (n).

Vì vậy, phương pháp tốt hơn để giải quyết vấn đề này là sử dụng phương pháp tiếp cận Two-Pointer, trong đó chúng ta sẽ lấy hai con trỏ thấp và cao mà ban đầu sẽ trỏ đến phần tử ngoài cùng bên trái và phần tử ngoài cùng bên phải. Trong hai vòng lặp lồng nhau, chúng tôi sẽ kiểm tra xem ký tự ngoài cùng bên trái có phải là nguyên âm hay không và ký tự ngoài cùng bên phải cũng là nguyên âm, sau đó hoán đổi phần tử và di chuyển con trỏ bên phải.

  • Lấy đầu vào một chuỗi.

  • Một hàm Boolean để kiểm tra xem ký tự có phải là một nguyên âm hay không.

  • Một hàm reverseVowel (string &str) nhận một chuỗi làm đầu vào và đảo ngược các nguyên âm có trong chuỗi.

  • Khởi tạo hai con trỏ thấp và cao tương ứng trỏ tới ‘0’ và ký tự cuối cùng.

  • Kiểm tra các ký tự ngoài cùng bên trái và ngoài cùng bên phải nếu chúng là nguyên âm, sau đó hoán đổi ký tự tại chỗ và giảm con trỏ ngoài cùng bên phải.

  • Lặp lại các bước cho đến khi tất cả các ký tự của chuỗi không được truy cập.

Ví dụ

#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;
   int 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";
   string ans= reverseVowel(a);
   cout<<ans;
   return 0;
}

Đầu ra

Chạy đoạn mã trên sẽ tạo ra kết quả là,

titorailspount

Vì chuỗi đã cho "hướng dẫn viên" chứa các nguyên âm, sau khi đảo ngược các nguyên âm, nó sẽ tạo ra đầu ra là "titorailspount".