아스키 코드를 참고하면 10진수에 문자가 맵핑되어 있다. 문자 '0'은 48에 맵핑되어 있다. 문자 타입의 숫자를 정수 타입의 숫자로 바꾸고 싶으면 마이너스 연산자를 활용하면 된다. int 형과 char 형을 마이너스 연산하면 char는 4byte인 정수형을 따르게 된다.
'5'을 int형인 5로 변환하고 싶으면 48을 빼주면 된다.
char temp = 5;
cout << temp - 48; // (int 타입) 5
char 배열에 숫자 문자가 담겨 있다면 위의 방법을 각 값에 적용하면 된다. 예를 들어 charArr[5] = {'1', '2', '3', '4', '5'} 라면 intArr[i] = charArr[i] - 1를 반복해서 int 타입의 배열을 얻을 수 있다.
아래 코드는 숫자 문자열을 입력받아 내림차순으로 정렬하여 출력하는 코드이다. 1427번
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string number;
cin >> number;
int length = number.length();
int *arr = (int *)malloc(sizeof(int) * length);
for (int i = 0; i < length; i++)
arr[i] = number[i] - 48;
sort(arr, arr + length);
for (int i = length - 1; i >= 0; i--)
cout << arr[i];
return 0;
}