나만의 작은 도서관

[문자열] 문자열을 정수로 stoi(), 숫자를 문자열로 to_string() 본문

C++/문법 및 메소드(STL)

[문자열] 문자열을 정수로 stoi(), 숫자를 문자열로 to_string()

pledge24 2024. 3. 21. 02:11

입력으로 주어지는 한자리 숫자들이 붙어있어 하나의 숫자로 인식되는 경우나, 숫자로 된 문자열을 계산해야 하는 경우처럼 문자열을 숫자로, 숫자를 문자열로 변환(casting) 해야하는 상황이 종종 발생한다. 이럴 때 유용하게 사용할 수 있는 함수가 stoi(), to_string()이다.

 

stoi()

// stoi(바꾸고자 하는 문자열)
inline int
  stoi(const string& __str, size_t* __idx = 0, int __base = 10)
  { return __gnu_cxx::__stoa<long, int>(&std::strtol, "stoi", __str.c_str(),
					__idx, __base); }

String TO Integer의 약자로, 바꾸고자 하는 문자열을 int 자료형으로 변환한다. 해당 함수는 변환 결과를 리턴할 뿐이므로 따로 선언한 변수에 저장하지 않으면 변환 결과는 저장되지 않는다.

 

stoi() 예제

#include <bits/stdc++.h>

#define fastio cin.tie(0)->sync_with_stdio(0)

using namespace std;

int main() {
    fastio;
    
    string a_str = "5";
    stoi(a_str);
    cout << a_str + 2 << '\n';      // 오류!
    
    int a_int = stoi(a_str);
    cout << a_int + 2 << '\n';      // 7
}

첫번째 cout 출력이 오류가 난 이유는 string 자료형과 숫자를 연산하려고 했기 때문. 위에서 설명했듯이 stoi() 함수는 다른 변수에 저장하지 않으면 변환 결과는 저장되지 않기 때문에 a_str 변수는 그대로 string 자료형을 유지한다.

 

 

만약 문자열 자료형을 int가 아닌 자료형으로 변경하고 싶다면 아래 표를 참조하면된다.

stod string -> double
stof string -> float
stoi string -> integer
stol string -> long
stold string -> long double
stoll string -> long long
stoul string -> unsigned long
stoull string -> unsigned long long

to_string()

// to_string(바꾸고자 하는 숫자)
inline string
  to_string(unsigned long long __val)
  { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
					   4 * sizeof(unsigned long long),
					   "%llu", __val); }

바꾸고자 하는 숫자를 문자열로 변환한다. 해당 함수는 변환 결과를 리턴할 뿐이므로 따로 선언한 변수에 저장하지 않으면 변환 결과는 저장되지 않는다.

 

to_string() 예제

#include <bits/stdc++.h>

#define fastio cin.tie(0)->sync_with_stdio(0)

using namespace std;

int main() {
    fastio;
    
    int a = 5;
    cout << to_string(a) << '\n';       // 5
    long long b = 24;
    cout << to_string(b) << '\n';       // 24
    float c = 2.4;
    cout << to_string(c) << '\n';       // 2.400000
}

 

 

float의 경우 float가 표현할 수 있는 최대 소수점 자리까지 표현하여 출력된다.