C++에서 Int를 문자열로 변환하는 방법

Jinku Hu 2023년10월12일
  1. 문자열 매크로를 사용하여 Int 리터럴을 문자열로 변환
  2. Int에서 문자열로의 변환을 위해to_string()메소드 사용
  3. Int에서 문자열로 변환하려면std::stringstream 클래스 및str()메서드 사용
  4. Int에서 문자열로의 변환을 위해std::to_chars 메소드 사용
C++에서 Int를 문자열로 변환하는 방법

이 기사에서는 intstring으로 변환하는 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;
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C++ Integer