lastnamesong

[C++] '0'을 숫자 0으로 바꾸는 방법 (자료형, char, int) 본문

Algorithm

[C++] '0'을 숫자 0으로 바꾸는 방법 (자료형, char, int)

응솩이 2025. 4. 8. 22:22
반응형

이전 글에서 풀이했던 백준의 미로 관련 문제들을 보면 띄어쓰기 없이 입력 받는 것을 볼 수 있었다.

이런 문제를 풀기 위해서 우리는 숫자 형태의 데이터를 2차원 배열에 저장해야 한다. 그런데 막상 cin으로 입력을 받아보면, 생각보다 쉽지 않다. 이번 글에서는 이런 상황에서 char 자료형과 '0'의 관계, 그리고 왜 c - '0'이라는 코드를 쓰는지 정리해본다.


숫자를 char로 받는 이유

먼저, 위 입력에서 한 줄을 보면 101010처럼 공백 없이 숫자들이 이어져 있다. 이걸 cin으로 입력 받을 때, 많은 입문자들이 이렇게 생각하곤 한다.

int num;
cin >> num; // 한 글자씩 숫자를 받는다?

하지만 이렇게 하면 한 줄 전체가 하나의 정수로 읽힌다.
즉, 101010이 숫자 하나로 들어오는 것이지, 1, 0, 1, 0, 1, 0으로 나뉘지 않는다. 이건 우리가 원하는 입력 방식이 아니다.

 

그래서 아래와 같이 char를 써야 한다.

char c;
cin >> c;

이렇게 하면 공백없이 이어진 숫자 문자열에서도 한 글자씩 입력받을 수 있다. "101010"이라면 c'1', '0', '1'... 이런 식으로 들어온다.

 

그런데, char은 숫자가 아니다. 즉, '1'은 우리가 알고 있는 숫자 1이 아니다. 문자형 '1', 즉 ASCII 코드 49번이다. '0'은 ASCII 코드 48번이다. 그러니 우리가 숫자로 쓰고 싶다면 아래와 같은 작업이 필요하다.

int num = c - '0';

즉, '1' - '0' = 49 - 48 = 1 이 되고, 문자 '1'을 정수 1로 변환해주게 된다.

예제

다음과 같은 코드를 실행하면 바로 확인할 수 있다.

char c;
cin >> c;
int value = c - '0';
cout << value << endl;

입력: 1 → 출력: 1
입력: 0 → 출력: 0

 

만약 c - '0'을 안 하고 그냥 출력하면 어떻게 될까?

char c;
cin >> c;
cout << c << endl;

이 경우 출력은 문자 '1'이다. 우리가 원하는 숫자 1이 아니라, 단지 문자 '1'를 그대로 출력한 것이다.


공백으로 구분되어 있는 입력이라면 당연히 int로 받을 수 있다.

하지만 미로 탐색 문제처럼 숫자들이 공백 없이 붙어 있을 경우, cin >> int로는 분리해서 받을 수 없다. 그래서 문자로 한 글자씩 받아야 하고, 그걸 숫자로 바꾸는 과정이 필요한 것이다.

 

문자열로 숫자를 처리하는 경우가 종종 있을 것 같으므로 잘 기억해두면 좋겠다..

반응형