Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 문자열에서 처음 X개의 모음 추출하기

이 문제에서는 크기가 N인 문자열 str[]과 정수 X가 주어집니다. 우리의 과제는 문자열에서 처음 등장하는 X개의 모음을 출력하는 프로그램을 만드는 것입니다.

문자열에서 앞에서부터 X개의 모음을 순서대로 출력하며, 만약 문자열에 포함된 모음의 개수가 X보다 적다면 -1을 출력해야 합니다.

문제 이해를 위한 예시

입력: str = "learn C programming language", X = 5
출력: e, a, o, a, i
모음은 a, e, i, o, u 입니다.

해결 접근 방법

이 문제의 간단한 해결 방법은 문자열을 한 글자씩 순회(traverse)하는 것입니다. 순회하면서 발견되는 모든 모음을 별도의 모음 문자열(vowels string)에 저장하고, 이 문자열의 길이가 X와 같아지는 순간 해당 문자열을 반환합니다. 만약 문자열 전체를 순회한 후에도 모음의 개수가 X에 도달하지 못한다면 -1을 반환합니다.

알고리즘 단계

1. 빈 모음 문자열을 초기화합니다.
2. 원본 문자열을 처음부터 끝까지 한 문자씩 확인합니다.
3. 현재 문자가 모음(a, e, i, o, u)이라면 모음 문자열에 추가합니다.
4. 모음 문자열의 길이가 X가 되면 즉시 반환합니다.
5. 반복이 끝날 때까지 조건을 만족하지 못하면 "-1"을 반환합니다.

예제 코드

아래는 위 해결 방법의 동작을 보여주는 C++ 프로그램입니다.

#include <iostream>
#include <string.h>
using namespace std;
bool isaVowel(char c){
c = tolower(c);
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
return true;
return false;
}
string findXVowelsString(string s, int x){
string vowelsString = "";
for (int i = 0; i < s.length(); i++) {
if (isaVowel(s[i]))
vowelsString += s[i];
if (vowelsString.length() == x) {
return vowelsString;
}
}
return "-1";
}
int main(){
string str = "learn C programming language";
int x = 5;
cout<<"The first "<<x<<" vowels from the string are "<<findXVowelsString(str, x);
return 0;
}

실행 결과

The first 5 vowels from the string are eaoai

코드 설명

isaVowel 함수는 입력받은 문자를 소문자로 변환한 뒤, a/e/i/o/u 중 하나에 해당하는지 검사하여 참 또는 거짓을 반환합니다. 대소문자를 모두 처리하기 위해 tolower()를 사용한 점이 핵심입니다.

findXVowelsString 함수는 문자열을 순회하며 모음만 모으고, 목표 개수 X에 도달하면 즉시 결과를 반환함으로써 불필요한 연산을 줄입니다. 시간 복잡도는 O(N)으로, 문자열의 길이에 비례합니다.