10820번 : 문자열 분석
문제 )
문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.
각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.
입력 :
첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.
출력 :
첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.
풀이)
C++에서는 각 문자열을 아스키 코드를 통해 처리한다는 것을 알면,
크기 비교를 통해 쉽게 풀 수 있는 문제이다.
하지만 난 자꾸 틀렸는데,
한참을 뒤지고 나서야 그 이유를 알 수 있었다.
틀린 이유는 바로 cin.eof() 때문.
cin.eof() 메서드의 경우 입력을 받으려고 시도해. 없는 것이 확인되어야 true를 반환한다고 한다.
getline의 경우에는 줄바꿈 문자만 읽고 함수가 넘어가기 때문에 루프가 한번 더 돌아
0 0 0 0 과 같은 출력을 한번 더 해서 오답이 났던 것 같다.
자세한 내용은 아래 링크에 상세히 설명되어 있으니 가서 읽어보면 좋을 것 같다.
https://www.acmicpc.net/board/view/49133
글 읽기 - 종료조건에서 질문사항이 있습니다 !!
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sentence;
while (getline(cin, sentence)) {
int upper = 0, lower = 0, space = 0, number = 0;
for (int i = 0; i < sentence.length(); i++) {
if (sentence.substr(i, 1) >= "A" && sentence.substr(i, 1) <= "Z") {
upper++;
}
else if (sentence.substr(i, 1) >= "a" && sentence.substr(i, 1) <= "z") {
lower++;
}
else if (sentence.substr(i, 1) == " ") {
space++;
}
else if (sentence.substr(i, 1) >= "0" && sentence.substr(i, 1) <= "9") {
number++;
}
}
cout << lower << " " << upper << " " << number << " " << space << "\n";
}
return 0;
}
|
cs |
출처 : https://www.acmicpc.net/problem/10820
10820번: 문자열 분석
문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있
www.acmicpc.net
'Develop > 백준 (Cpp)' 카테고리의 다른 글
[백준] 10173번 : 니모를 찾아서 (C++) (0) | 2023.02.03 |
---|---|
[백준] 2857번 : FBI (C++) (0) | 2023.02.03 |
[백준] 11656번 : 접미사 배열 (C++) (0) | 2023.02.03 |
[백준] 10866번 : 덱 (C++) (1) | 2023.02.03 |
[백준] 10845번 : 큐 (C++) (0) | 2023.02.03 |