문제
문자열 N개가 주어진다.
이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.
각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.
입력
첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.
출력
첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.
예제 입력 1
This is String
SPACE 1 SPACE
S a M p L e I n P u T
0L1A2S3T4L5I6N7E8
예제 출력 1
10 2 0 2
0 10 1 8
5 6 0 16
0 8 9 0
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
while (true) {
int lower = 0;
int upper = 0;
int number = 0;
int blank = 0;
getline(cin, str);
if (!str.length()) break;
for (char const &c : str) {
if (c >= 'a' && c <= 'z') {
lower++;
}
else if (c >= 'A' && c <= 'Z') {
upper++;
}
else if (c >= '0' && c <= '9') {
number++;
}
else if (c == ' ') {
blank++;
}
}
printf("%d %d %d %d\n", lower, upper, number, blank);
}
return 0;
}
이 문제는 알고리즘이 너무 간단해서 따로 리뷰할 필요도 없을 것 같다.
다만 EOF를 어떻게 처리하냐 인데,
그냥 입력받는 문자열의 길이가 0일경우(입력이 없을경우) break를 걸어주었다.
다른 방법으로는 while(getline(cin, str)) 처럼 입력이있을때만 반복문을 도는식으로 조건문을 직접 적어주면된다.
'PS > 백준' 카테고리의 다른 글
백준 / 구현 / 10824번 / 네 수 / C++ (0) | 2021.07.30 |
---|---|
백준 / 문자열 / 11655번 / ROT13 / C++ (0) | 2021.07.30 |
백준 / 스택 / 1918번 / 후위 표기식 / C++ (0) | 2021.07.26 |
백준 / 스택 / 1935번 / 후위 표기식 2 / C++ (0) | 2021.07.24 |