개발/알고리즘

10820_문자열분석

송디 2020. 11. 15. 15:04

문자열에 소문자, 대문자, 숫자, 공백의 갯수를 세는 문제입니다. 

어렵지 않은 문제이지만, 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

참조 : 

jhnyang.tistory.com/107

 

 

 

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, 0sizeof(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