https://www.acmicpc.net/problem/10820
각각 비교를 통해 문자를 구분한다.
N이 입력되지 않음으로, eof를 이용하여 종료조건을 잘 받아야 한다.
while (!cin.eof())
{
getline(cin, s)
...
}
이런 식으로 처음에 했는데 안되었다.
이유는
마지막 줄을 읽고나면 마지막 줄 뒤에 달려있는 줄바꿈 문자만 읽고 getline이 종료하기 때문에 eof인지는 확인하지 않는다. 따라서 루프가 한 번 더 돈다.
while (getline(cin, s))
{
...
}
읽단 읽으려고 시도를 하고 안 되면 종료하기 때문에 딱 맞게 돈다.
#include <iostream>
#include <string>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string S;
while (getline(cin, S))
{
int num[4] = {0, }; // 소문자, 대문자, 숫자, 공백의 개수
for (int j=0; j<S.length(); j++){
char c = S[j];
// 소문자 ?
if (c >= 'a' && c <= 'z')
num[0]++;
// 대문자 ?
else if (c >= 'A' && c <= 'Z')
num[1]++;
// 숫자 ?
else if (c >= '0' && c <= '9')
num[2]++;
//공백 ?
else if (c == ' ')
num[3]++;
}
for (int j=0; j<4; j++){
cout << num[j] << ' ';
}
cout << '\n';
}
return 0;
}
eof 주의합쉬다..