문자열 입력에 대해서 막상 문제를 풀려고 하니
어떻게 풀어야 할지 막막했다.
그냥 BOJ 나 Codeground 문제들만 풀다보니 숫자나 char 형에 대해서만
조금 풀어보고 이렇게 긴 문자열을 다루는 방법에 대해서는 잘 알지 못하여서 구글링을 하며 문제를 풀었다.
cin을 사용할 때의 문제점
1. 버퍼 오버플로우
변수의 배열의 크기를 넘어가는 문자열을 입력받게 되면, 문제가 발생하는 것
2. cin은 공백 처리를 제대로 하지 못한다.
아래 코드에서 입력으로 123 321 을 입력한다면 출력으로는 123 밖에 출력되지 않는다.
1 2 3 4 5 6 7 8 9 10 11 | #include<iostream> using namespace std; int main() { int a; cin >> a; cout << a << endl; return 0; } | cs |
이를 해결하기 위해서 getline() 함수를 사용. 이를 위해 #include<string> 추가 해야함.
##########################정리###############################
cin은 문자,문자열
getline() 은 문자열
cin, get 입력하고 엔터 -> get이나 getline만나면 엔터때문에 오작동.
getline 입력하고 엔터는 엔터를 null로 바꿔 저장하므로 -> get이나 cin 만나도 정상 작동
ge
** cin , get, getline 에 대해서 디테일 하게 다시 공부할 것
11718 번 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<iostream> #include<string> using namespace std; int main() { string s; while (getline(cin,s)) { cout << s << endl; } return 0; } | cs |
반응형