본문 바로가기

알고리즘/BOJ

11718번

문자열 입력에 대해서 막상 문제를 풀려고 하니 

어떻게 풀어야 할지 막막했다.

그냥 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


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

2445번  (0) 2017.11.12
10818번  (0) 2017.11.12
1924번  (0) 2017.11.12
10952번  (0) 2017.11.12
10951번  (0) 2017.11.12