Como converter Int para uma string em C++
-
Usar Macro de Stringizing para converter um
int
em umString
-
Utilize
to_string()
Método para conversão de Int para String -
Utilize
std::stringstream
Class estr()
Method for Int to String Conversion -
Utilize o método
std::to_chars
para conversão de Int para String
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;
}
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