Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 문자열의 모음 반전

<시간/>

문자열이 주어지면 작업은 주어진 문자열에 있는 모든 모음을 뒤집는 것입니다. 예를 들어,

입력-1 -

a = “tutor”

출력 -

totur

설명 − 문자열 "tutor"를 반대로 하면 출력이 "totur.

로 생성됩니다.

입력-2 -

a = “mathematics”

출력 -

mithametacs

설명 − 문자열 "mathematics"를 반대로 하면 "mithametacs"로 출력이 생성됩니다.

이 문제를 해결하기 위한 접근 방식

문자열이 주어지면 그 안에 있는 모든 모음을 반대로 바꿔야 합니다. 이 특정 문제를 해결하는 방법에는 여러 가지가 있지만 선형 시간 O(n)에서 해결해야 합니다.

따라서 이 문제를 해결하는 더 좋은 방법은 처음에 맨 왼쪽 요소와 맨 오른쪽 요소를 가리키는 두 개의 포인터를 low와 high로 취하는 Two-Pointer 접근 방식을 사용하는 것입니다. 두 개의 중첩 루프에서 맨 왼쪽 문자가 모음이고 맨 오른쪽 문자도 모음인지 확인한 다음 요소를 바꾸고 오른쪽 포인터를 이동합니다.

  • 문자열을 입력하세요.

  • 문자가 모음인지 확인하는 부울 함수입니다.

  • reverseVowel(string &str) 함수는 문자열을 입력으로 받아 문자열에 있는 모음을 반전시킵니다.

  • 각각 '0'과 마지막 문자를 가리키는 두 개의 포인터를 low와 high로 초기화합니다.

  • 맨 왼쪽과 맨 오른쪽 문자가 모음인지 확인한 다음 문자를 제자리에서 바꾸고 맨 오른쪽 포인터를 감소시킵니다.

  • 문자열의 모든 문자를 방문하지 않을 때까지 단계를 반복합니다.

예시

#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;
}

출력

위의 코드를 실행하면 다음과 같이 출력이 생성됩니다.

titorailspount

주어진 문자열 "tutorialspoint"에는 모음이 포함되어 있으므로 모음을 반대로 하면 "titorailspount"로 출력됩니다.