-
[백준] 4458 :: 첫 글자를 대문자로 ( C++ 한 줄 입력받기, getline 함수 , cin.ignore())알고리즘/BOJ(C++) 2020. 12. 19. 16:50반응형
원래 이 문제는 너무 간단해보여서 포스팅 안하려다가
딱 하나 정리하려고 쓴다.
테스트 케이스 만큼 한 줄 씩 입력받아야하는데,
cin>> 이렇게 쓰면 공백을 기준으로 변수가 저장된다.
그래서 "You are lovely" 이런 문장을 쓰게 되면 You 까지만 입력이 된다.
한 줄을 통째로 입력 받으려면 getline을 써야한다.
ex) getline(cin,str)
이렇게 쓰게 되면 '\n'을 기준으로 구분하여 입력을 받을 수 있게 된다.
이제 완벽하다고 생각했는데 자꾸 테스트 케이스가 5개인데 한개가 덜 입력되는 현상이 발견했다.
문제가 무엇인가 했더니, getline을 사용하면 cin.ignore()이 필요했기 때문이었다.
그렇다면 getline을 사용할 때 cin.ignore은 왜 필요한걸까
앞서 테스트케이를 입력받을 때 cin>>T 이렇게 cin을 한번 썼는데, 이 떄 cin은 \n을 입력 버퍼에 남겨둔다.
그렇기 때문에 geline은 '\n'을 입력을 받기 때문에 앞에 남은 \n을 하나 입력받고, 테스트케이스 개수를 하나 까먹는 것이다.
다음엔 안까먹고 실수 안하기
소스코드
더보기1234567891011121314151617181920212223#include <iostream>#include <string>using namespace std;string s;int T;int main() {/*a: 97z : 122A : 65Z : 90*/cin >> T;cin.ignore();while (T--) {getline(cin, s );if (s[0] >= 97 && s[0] <= 122) {s[0] -= 32;}cout << s << endl;}}cs 반응형'알고리즘 > BOJ(C++)' 카테고리의 다른 글
[백준 / BOJ] 1600 :: 말이 되고픈 원숭이 (0) 2020.12.30 [백준] 1025 :: 제곱수 찾기 (2) 2020.12.21 [백준] 10250 :: ACM 호텔 (0) 2020.12.19 [백준] 2583 :: 영역 구하기 (0) 2020.12.19 [백준] 1024 :: 수열의 합 (0) 2020.07.27