관리 메뉴

cococo-coding

4458번. 첫 글자를 대문자로 (c++ 풀이) 본문

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

4458번. 첫 글자를 대문자로 (c++ 풀이)

_dani 2023. 12. 12. 15:00

최종코드

#include <iostream>
#include <string>
using namespace std;

int main() {
    //1. 줄의 수 n을 입력받는다.
    //2. 각 줄을 입력받는다.
    //3. 각 줄의 첫글자를 대문자로 바꾼다.
    //4. 바꾼 줄을 출력한다. 

    //1
    int n;
    cin >> n;
    cin.ignore();

    //2
    string s;
    for(int i=0; i<=n; i++){
        getline(cin,s); //공백포함한 문자열을 입력
        //3
        if(s[0]>=97 && s[0]<=122) {
            s[0]=s[0]-32;
            cout << s << endl;
        } else {
            cout << s << endl; //영어소문자가 아닌 줄들은 원글 그대로 출력
        }
    }
    return 0;
}

cin.ignore()

: 입력으로 들어간 입력버퍼를 지워주는 역할을 한다. 

 

처음에는 cin.ignore() 없이 코드를 돌렸는데 자꾸 공백이 한 줄 나오고 그 밑줄부터 결과가 출력되었다.

구글링을 해보니 줄의 수 n을 입력받을 때 이 n의 입력버퍼가 이후의 문자열 s를 입력받을 때 입력으로 따라들어가는 현상때문에 발생한 결과이더라. 

이를 막기위해서는 ignore()함수를 써주면 해결된다.

 

아래 사진은 ignore()함수를 써주지 않았을 때의 출력상태이다. 오른쪽의 프로그램 출력창을 보면 처음에 공백이 한 줄 들어가고, 이후부터 결과값이 출력됨을 확인할 수 있다. 

 

(출처: https://codecollector.tistory.com/347 뽕뽑기님 블로그)