[코딩테스트 / C++] C++ 문자열->정수, 정수->문자열 변환하기

1 분 소요

문자열 -> 정수

#include<string>

int main(){
    int n = stoi("10");
    cout<<n;  // 10

    char s[10];  // 변환한 문자열을 저장할 배열
    int num = 100;  

    sprintf(s, "%d", num); // %d를 지정하여 정수를 문자열로 저장

    printf("%s\n", s);    // 100
}

C++11 부터 아래 함수들을 사용할 수 있다.

  • stoi = string to int

  • stof = string to float

  • stol = string to long int

  • stod = string to double

  • stoul = string to unsigned int

  • stoll = string to long long

  • stoull = string to unsigned long long

  • stold = string to long double


int stoi(const string& str, size_t* idx = 0, int base = 10)

  1. 첫번째 인자 변경할 문자열로 복사의 비용이 들어가지 않도록 &(reference)를 이용하고 함수 내부에서 변경을 막기위해 const 상수 취급해 넘긴다.

  2. 두번째 인자 두번째는 포인터 타입으로 맨 첫번째 부터 숫자가 아닌 부분까지 해서 그부분의 포인터를 걸러준다. 세번째 인자까지 사용하는데, 두번째 인자는 사용하지 않겠다 하면 nullptr을 넣으면 된다. 예를 들면 string str = “11abcdefg”; size_t sz; int a = stoi(str, &sz); 이런식 이라면 a 에는 11이 들어가고, str[0] = ‘3’, str[1] = ‘3’, str[2] = ‘b’ 이기 때문에 size_t sz 에는 2가 들어가게 된다.

  3. 세번째 인자 base 는 진수를 뜻하며 default는 10으로 10진수를 의미한다. binary (2진수)이라면 2를 넣고 octal (8진수)이라면 8을 넣고 hexadecimal (16진수)이라면 16을 넣고, decimal (10진수)는 디폴트 이므로 넣지 않아도 된다. 10을 넣어도 무관하다. 예를 들어보면 string str = “0x32” //16진수 표현법 string 내부에 있는게 16진수이므로 int 타입으로 바꾸어달라고 stoi(str, nullptr, 16) 표현해 준다.



정수 -> 문자열

#include<string>

int main(){
    int num = 10;
    string str = to_string(num);
    cout<<str; // "10"
}