포인터를 사용하여 문자열에 포함된 모음의 개수를 구하려면 먼저 문자열, 모음, 그리고 문자열과 포인터를 함께 사용하는 방법에 대한 기본 개념을 이해해야 합니다.
기본 개념 정리
문자열(String)은 문자들의 배열입니다. 모음(Vowel)은 {a, e, i, o, u} 집합에 속하는 문자를 의미합니다. 포인터(Pointer)는 변수가 저장된 메모리 위치(주소) 값을 저장하는 변수입니다.
문자열에서 모음의 개수를 찾는 방법은 간단합니다. 문자열을 처음부터 끝까지 순회하면서 각 문자가 모음과 일치하는지 비교하고, 일치할 경우 카운터 값을 1씩 증가시키면 됩니다.
구현 시 주의사항
아래 예제 코드는 문자열이 모두 소문자로 이루어져 있다는 전제 조건을 가지고 있습니다. 만약 대문자가 포함된 문자열을 다뤄야 한다면, 비교하기 전에 tolower() 함수를 사용하여 문자를 소문자로 변환한 뒤 검사하면 됩니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
char str[] = "i love tutorials point";
char *prt ;
prt = str;
int count = 0;
for(prt;(*prt) != '\0'; prt++) {
if (*prt == 'a' || *prt == 'e' || *prt == 'i'|| *prt == 'o' || *prt == 'u') {
count++;
}
}
cout << "Vowels in the string: " << count;
return 0;
}실행 결과
Vowels in the string: 9
코드 동작 원리
위 코드의 핵심 로직을 살펴보면 다음과 같습니다.
먼저 포인터 prt에 문자열 배열 str의 시작 주소를 할당합니다. 이후 for 반복문에서 포인터가 가리키는 문자가 문자열의 끝을 나타내는 널 문자('\0')가 아닐 때까지 한 글자씩 이동하며(prt++) 검사를 진행합니다.
각 반복마다 역참조 연산자(*)를 통해 현재 가리키고 있는 문자의 실제 값에 접근하고, 이 값이 a, e, i, o, u 중 하나와 일치하는지 확인합니다. 일치하면 count 변수가 증가하고, 최종적으로 반복문이 종료되면 문자열 내 모음의 총 개수가 화면에 출력됩니다.
이 방식은 배열 인덱스를 사용하는 대신 포인터 자체를 순회 변수로 활용하기 때문에, 포인터 산술 연산과 문자열 처리의 관계를 이해하는 데 도움이 되는 좋은 학습 예제입니다.