[BAEKJOON 1264번 : 모음의 개수]
[문제]

[고찰]
처음에 이 문제를 풀었을 때, while문을 통해 입력을 반복하여 받고 if문을 통해 모음을 판별하는 것까지는 이해가 갔습니다.
하지만 getline 함수 개념에 대해 부족하여 정답까지는 가지 못하였습니다. 그러기에 getline의 개념을 정리합니다.
[개념 : getline( )]
std::getline 함수는 문자열 입력을 처리하는데 사용되는 함수로, 전체 한 줄을 읽어들이는데 사용합니다.
주로 사용자로부터 문자열을 입력받거나 파일에서 문자열을 읽어올 때 사용됩니다.
[헤더파일]
getline 함수는 std::cin 또는 파일 스트림에서 주로 사용되며, <string> 헤더 파일에 정의되어 있습니다.
[함수 사용법]
// 기본 사용 방법
std:getline(std::istream& is, std:string& str);
// 구분자 지정 사용 방법
std::getline(std::istream& is, std::string& str, char delim);
- std::istream& is
- 입력 스트림 객체를 참조합니다. 일반적으로 std::cin이나 파일 입력 스트림을 사용합니다.
- std::string& str
- 입력받은 문자열을 저장할 std::string 객체의 참조입니다.
- chat delim
- 선택사항으로, 줄을 구분할 문자입니다.
- 기본값은 줄 바꿈 문자('₩n')이며, 구분할 문자가 나타날 때까지 문자열을 읽습니다.
[예시]
위의 문제에 적용한다면, 아래와 같이 사용할 수 있습니다.
string str;
getline(cin, str);
위에서 정리한 구분자를 지정하여 사용하는 방법을 통해, '#'을 지정하여 입력을 끝마칠 수도 있지만
문제에서 원하는 바는 줄 바꿈을 통하여 문장을 나누고, 그 문장에서의 모음 개수를 세야하기 때문에 기본값인 줄 바꿈 문자를 사용하는 것이 더 적합합니다.
[정리]
getline 함수의 사용법에 대해 정확히 알았으니, 다음 문제에서 한 줄 입력을 요구할 때 잊지 않고 잘 활용해야겠습니다.
뿐만 아니라, 대소문자를 모두 세야한다는 부분 역시 확실히 챙겨야합니다.
출력 역시 예제에서는 3줄이 차례대로 이쁘게 나왔지만, 경우에 따라 무시해도 된다는 것을 생각해야할 것 같습니다.
[Solution]
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
int count = 0;
while (true) {
getline(cin, str);
if (str != "#") {
for (int i = 0; i < str.length(); i++) {
if (tolower(str[i]) == 'a')
++count;
else if (tolower(str[i]) == 'e')
++count;
else if (tolower(str[i]) == 'i')
++count;
else if (tolower(str[i]) == 'o')
++count;
else if (tolower(str[i]) == 'u')
++count;
}
cout << count << endl;
count = 0;
}
else {
break;
}
}
return 0;
}'코딩 테스트' 카테고리의 다른 글
| [코딩테스트 9일차] BAEKJOON 10808번, 11365번, 11720번 (0) | 2025.04.22 |
|---|---|
| [코딩테스트 8일차] BAEKJOON 2439, 2440번 : 별 찍기 - 2, 3 (0) | 2025.04.20 |
| [코딩테스트 6일차] BAEKJOON 9498번 : 시험 성적 (0) | 2025.04.11 |
| [코딩테스트 5일차] BAEKJOON 2744번 : 대소문자 바꾸기 (0) | 2025.04.10 |
| [코딩테스트 4일차] BAEKJOON 2741번 : N찍기 (0) | 2025.04.07 |