C++에서 Int를 문자열로 변환하는 방법
- 문자열 매크로를 사용하여 Int 리터럴을 문자열로 변환
-
Int에서 문자열로의 변환을 위해
to_string()
메소드 사용 -
Int에서 문자열로 변환하려면
std::stringstream
클래스 및str()
메서드 사용 -
Int에서 문자열로의 변환을 위해
std::to_chars
메소드 사용
이 기사에서는 int
를string
으로 변환하는 C++ 메서드를 소개합니다.
문자열 매크로를 사용하여 Int 리터럴을 문자열로 변환
이 메서드는 int를 문자열로 변환 할 때 사용이 매우 제한적입니다. 즉, 소위 하드 코딩 된 숫자 값을 문자열유형으로 변환해야하는 경우에만 사용할 수 있습니다.
매크로는 프로그래머가 이름을 할당하는 코드 블록으로, 이름이 사용될 때마다 매크로 확장 (매크로 문의 오른쪽 부분)으로 대체됩니다.
이것은 C/C++ 전 처리기 기능이므로 리터럴 값에만 사용할 수 있습니다.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define STRING(num) #num
int main() {
string num_cstr(STRING(1234));
num_cstr.empty() ? cout << "empty\n" : cout << num_cstr << endl;
return EXIT_SUCCESS;
}
출력:
1234
그러나 다른 매크로 확장의 결과 (이 예에서는 123123
로 확장되는 NUMBER
)를 문자열 화하려면 다음 코드 블록과 같이 2 단계 매크로를 정의해야합니다.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define STRING(num) STR(num)
#define STR(num) #num
#define NUMBER 123123
int main() {
string num_cstr(STRING(NUMBER));
num_cstr.empty() ? cout << "empty\n" : cout << num_cstr << endl;
return EXIT_SUCCESS;
}
출력:
123123
Int에서 문자열로의 변환을 위해to_string()
메소드 사용
to_string
은 단일 숫자 값을 인수로 취하고string
객체를 반환하는 내장<string>
라이브러리 함수입니다. 이 방법은이 문제에 대해 권장되는 솔루션입니다. 그러나 부동 소수점 값을to_string
메서드에 전달하면 다음 코드 예제와 같이 예상치 못한 결과가 발생합니다.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int n1 = 9876;
double n2 = 0.0000000000000000000001;
double n3 = 2.000000000000123;
string num_str1(std::to_string(n1));
string num_str2(std::to_string(n2));
string num_str3(std::to_string(n3));
num_str1.empty() ? cout << "empty\n" : cout << num_str1 << endl;
num_str1.empty() ? cout << "empty\n" : cout << num_str2 << endl;
num_str1.empty() ? cout << "empty\n" : cout << num_str3 << endl;
return EXIT_SUCCESS;
}
출력:
9876
0.000000
2.000000
Int에서 문자열로 변환하려면std::stringstream
클래스 및str()
메서드 사용
이 문제를 해결하는 또 다른 대안은string
인스턴스를 내부적으로 저장하고stringstream
콘텐츠에서string
객체를 검색하는str()
메서드를 제공하는stringstream
클래스를 사용하는 것입니다.
#include <iostream>
#include <sstream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int n1 = 9876;
std::stringstream sstream;
sstream << n1;
string num_str = sstream.str();
num_str.empty() ? cout << "empty\n" : cout << num_str << endl;
return EXIT_SUCCESS;
}
출력:
9876
Int에서 문자열로의 변환을 위해std::to_chars
메소드 사용
다음 방법은 변환 된 결과 저장을 위해 임시char
배열을 초기화해야하므로 다른 방법에 비해 상대적으로 번거 롭습니다. 플러스 측면에서이 방법은 로케일과 무관하고 할당되지 않으며 던지지 않습니다. to_chars
함수는char
배열의 범위를 가져 와서 정수를 문자열로 변환합니다. 문자가 arr
변수에 저장되면 새로운string
객체가 arr.data()
인수로 초기화됩니다.
#include <array>
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define MAX_DIGITS 100
int main() {
int n1 = 9876;
std::array<char, MAX_DIGITS> arr{};
std::to_chars(arr.data(), arr.data() + arr.size(), n1);
string num_str(arr.data());
cout << num_str << endl;
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook