관리 메뉴

cococo-coding

10820번. 문자열 분석 (c++ 풀이) 본문

[BOJ] 코드 모음/C++_learning 문제집

10820번. 문자열 분석 (c++ 풀이)

_dani 2024. 1. 13. 03:40

문제

풀이

문자열을 입력받고, for문과 if문 조건을 이용하여 4가지 케이스(대문자, 소문자, 숫자, 공백)으로 분기해준다. 각각 카운팅 변수를 생성하여 해당케이스에 맞으면 증가시켜주고, 최종적으로 이 카운팅변수들을 출력한다.

 

이때 while 반복문을 사용하여 str입력이 들어오는 동안만 코드를 실행하도록 한다. 

 

1. string형으로 str을 선언한다. 이때 while문으로 입력이 들어오는 동안 코드를 반복할 것이므로, str은 while문 밖에 선언하도록 한다.

2. 영어 소문자, 대문자, 공백, 숫자 카운팅 변수를 생성하고 0으로 초기화한다. 

for문을 이용해 각각 케이스별로 if문으로 분기하여 카운팅해준다. 

이때 숫자의 경우는 str[i]==0 이렇게 쓰면 안된다. 

str[i]=='0' 으로 써야 한다. 

3. 최종적으로 카운팅 변수들을 출력한다.

 

포인트

입력이 들어올때까지 반복하는 것 -> while(getline(cin, str)) 로 구현

아스키코드는 문자를 표현하므로 작은따옴표로 표시해준다 -> str[i]='0' (문자 0)

코드

#include <iostream>
#include <string> //getline함수 이용
using namespace std;

/*
    1. 문자열 n개를 입력받는다.
    2. 각 문자열에서 소문자, 대문자, 숫자, 공백의 개수를 찾는다.
    3. 찾은 네 가지 개수를 출력한다.
*/

int main() {
    //1
    string str;
    while (getline(cin, str)) {

        //2
        int small = 0, big = 0, num = 0, gap = 0;
        for (int i = 0; i < str.size(); i++) {
            if (str[i] >= 65 && str[i] <= 90) big++;
            else if (str[i] >= 97 && str[i] <= 122) small++;
            else if (isdigit(str[i]) != 0) num++;
            //else if(str[i]>='0' && str[i]<='9') num++;
            else if (str[i] == ' ') gap++;
        }

        //3
        cout << small << ' ' << big << ' ' << num << ' ' << gap << endl;
    }
    return 0;
}

나는 위에서 숫자를 카운팅할때 str[i]=0 이런식으로 따옴표를 빼고 쓴 바람에 

숫자를 카운팅하지 못 하는 오류가 났다. 

그래서 임시방편으로 위와 같은 함수를 이용해서 숫자를 카운팅했는데, 이 방법도 괜찮은 듯 하다.