문자열에 소문자, 대문자, 숫자, 공백의 갯수를 세는 문제입니다.
어렵지 않은 문제이지만, N 갯수만큼 입력을 받는데, N이 주어지지 않아 EOF가 와야 끝낼 수 있도록 해야 하는 것입니다. 저는 getline을 사용하였습니다.
더보기
getline 함수는 istream 라이브러리와 string 라이브러리에 존재한다. istream 라이브러리는 문자열 끝에 '\0'이 붙는 char *형식 , 즉 C언어 문자열을 따르는 방법이고, string 라이브러리는 c++ 의 string을 따르는 방법이다.
1
2
|
istream& getline(istream& is, string& str);
istream& getline(istream& is, string& str, char delim);
|
cs |
인자
is : 입력스트림 오브젝트 ex) cin
str : 입력받은 문자열을 저장할 string 객체
delim : 제한자로 이 문자에 도달시 추출 중단.
주의점
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include<iostream>
#include<string>
using namespace std;
int main(void){
char a[100], b[100], c[100];
cin >> a;
cin >> b;
cin >> c;
cout << "a : " << a << '\n';
cout << "b : " << b << '\n';
cout << "c : " << c << '\n';
}
|
cs |
입력
Hello
world
hi
입력시
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include<iostream>
#include<string>
using namespace std;
int main(void){
string a, b, c;
cin >> a;
getline(cin, b);
getline(cin, c);
cout << "a : " << a << '\n';
cout << "b : " << b << '\n';
cout << "c : " << c << '\n';
}
|
cs |
입력
hello
world
hi
cin은 내부적으로 띄어쓰기, 엔터, 탭과 같은 문자를 무시한다. 그러나 버퍼속에는 그대로 존재.
반면 getline은 입력 기준은 '\n'무시하지 않고 잡는 unformatting 함수.
위의 예에서 hello\n 는 cin으로 받았기 때문에 버퍼에는 \n이 남아있다. 다음 getline은 \n을 입력 받음
쉽게 생각하면
*cin
1) buffer : hello\n
*getline
2) buffer : \n\n
3) buffer : world\n
참조 :
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
|
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;
int groups[4];
int main(void){
string s;
while(getline(cin, s)){
memset(groups, 0, sizeof(groups));
for(char c : s){
if(c >= 'a' && c <= 'z')
groups[0]++;
else if(c >= 'A' && c <= 'Z')
groups[1]++;
else if(c >= '0'&& c <= '9')
groups[2]++;
else if(c == ' ')
groups[3]++;
}
for(int i = 0; i < 4;i++){
cout << groups[i];
if(i == 3)break;
cout << " ";
}
cout << "\n";
}
}
|
cs |
728x90
'개발 > 알고리즘' 카테고리의 다른 글
10824_네수 (0) | 2020.11.15 |
---|---|
11655_ROT13 (0) | 2020.11.15 |
11004_K번째 수 (0) | 2020.11.15 |
10825_국영수 (0) | 2020.11.14 |
20057_마법사 상어와 토네이도 (0) | 2020.11.03 |