문제 개요
C 언어에서 주어진 문자열에 포함된 모음(vowel)과 자음(consonant)의 개수를 세는 프로그램을 작성하는 방법을 알아보겠습니다. 이 예제는 문자열 처리와 조건문, 반복문의 기본기를 익히는 데 매우 유용한 실습 과제입니다.
해결 로직
핵심 아이디어는 간단합니다. 문자열의 각 문자를 하나씩 검사하면서, 해당 문자가 모음에 해당하는지 확인합니다. 모음 판별 조건은 다음과 같습니다.
if(str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U' || str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u')
이 조건이 참이면 모음 카운터(vowels)를 1 증가시키고, 그렇지 않으면 자음 카운터(consonants)를 1 증가시킵니다. 이 과정을 문자열의 끝을 나타내는 널 문자('\0')를 만날 때까지 반복하면 됩니다.
전체 예제 코드
다음은 문자열에서 모음과 자음의 개수를 세는 C 프로그램입니다.
/* 문자열에서 모음과 자음 개수 세기 */
#include <stdio.h>
int main(){
char str[100];
int i = 0, vowels = 0, consonants = 0;
printf("Enter any String : ");
gets(str);
while (str[i] != '\0'){
if(str[i]=='A'||str[i]=='E'||str[i]=='I'||str[i]=='O'||str[i]=='U'||
str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'||str[i]=='u'){
vowels++;
} else {
consonants++;
}
i++; /* 매 반복마다 반드시 인덱스를 증가 */
}
printf("vowels in this String = %d\n", vowels);
printf("consonants in this String = %d", consonants);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Enter any String: TutoriasPoint vowels in this String = 6 consonants in this String = 7
참고 사항
- 인덱스 증가 위치 주의: i++는 if-else 구문 바깥에서 반드시 실행되어야 합니다. 만약 else 블록 안에 넣으면 모음을 만났을 때 인덱스가 증가하지 않아 무한 루프에 빠질 수 있습니다.
- gets() 함수의 위험성: gets()는 입력 길이를 제한할 수 없어 버퍼 오버플로우 위험이 있으며 C11 표준에서 제거되었습니다. 실제 개발 환경에서는 fgets(str, sizeof(str), stdin)을 사용하는 것이 안전합니다.
- 공백 처리: 위 코드는 공백 문자도 자음으로 계산합니다. 공백을 제외하고 싶다면 조건문에 str[i] != ' ' 검사를 추가하면 됩니다.