나만의 작은 도서관
[문자열] 문자열을 정수로 stoi(), 숫자를 문자열로 to_string() 본문
입력으로 주어지는 한자리 숫자들이 붙어있어 하나의 숫자로 인식되는 경우나, 숫자로 된 문자열을 계산해야 하는 경우처럼 문자열을 숫자로, 숫자를 문자열로 변환(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가 표현할 수 있는 최대 소수점 자리까지 표현하여 출력된다.
'C++ > 문법 및 메소드(STL)' 카테고리의 다른 글
[C++] 탐구 일지 #2. 타입의 별칭: typedef, using 키워드 (0) | 2024.12.21 |
---|---|
[C++] 탐구 일지 #1. 소속을 지정하는 네임스페이스(namespace) (0) | 2024.12.21 |
[문자열] str1 == str2 는 TRUE? (0) | 2023.09.10 |
[문자열] 일부 문자열 반환 substr(), 문자열 길이 반환 length() (0) | 2023.06.25 |
[문자열] 특정 문자열 찾기 find(), 문자열 부분 교체 replace() (0) | 2023.06.24 |