Como converter Int para uma string em C++

Jinku Hu 12 outubro 2023
  1. Usar Macro de Stringizing para converter um int em um String
  2. Utilize to_string() Método para conversão de Int para String
  3. Utilize std::stringstream Class e str() Method for Int to String Conversion
  4. Utilize o método std::to_chars para conversão de Int para String
Como converter Int para uma string em C++

Este artigo apresentará os métodos C++ para converter um int em um string.

Usar Macro de Stringizing para converter um int em um String

Este método tem um uso bastante limitado quando se trata de uma conversão de strings. Nomeadamente, ele só pode ser utilizado quando os chamados valores numéricos codificados precisam ser convertidos para um tipo string.

Macros são blocos de código aos quais o programador atribui o nome, e sempre que o nome é utilizado, ele é substituído por expansão de macro (a parte direita da declaração de macro).

Esta é uma característica do pré-processador C/C++, o que significa que você só pode utilizá-la com valores literais.

#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;
}

Resultado:

1234

Observe, no entanto, que quando você quiser definir o resultado de outra expansão de macro (neste exemplo NUMBER que se expande para 123123), você precisará definir a macro em dois níveis como mostrado no seguinte bloco de código:

#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;
}

Resultado:

123123

Utilize to_string() Método para conversão de Int para String

A função de biblioteca to_string é uma função construída <string>, que toma um único valor numérico como argumento e retorna o objeto string. Este método é a solução recomendada para este problema. Entretanto, esteja ciente de que a passagem dos valores de ponto flutuante para o método to_string produz alguns resultados inesperados, como demonstrado no exemplo de código a seguir:

#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;
}

Resultado:

9876
0.000000
2.000000

Utilize std::stringstream Class e str() Method for Int to String Conversion

Outra alternativa para resolver este problema é utilizar a classe stringstream, que armazena a instância string internamente e fornece o método str() para recuperar o objeto string do conteúdo 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;
}

Resultado:

9876

Utilize o método std::to_chars para conversão de Int para String

O método a seguir é relativamente complicado em comparação com outros, uma vez que requer uma array temporária a ser inicializada para o armazenamento de resultados convertidos. Embora, no lado positivo, este método seja independente do local, sem alocação e sem lançamento. A função to_chars toma o intervalo da array de char e converte o inteiro para uma string. Uma vez que os caracteres são armazenados na variável arr, um novo objeto string é inicializado com o argumento 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;
}
Autor: 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

Artigo relacionado - C++ Integer