«Int para string» em C++: por que essa questão atormenta até os experientes?
\nImagine a situação: você está escrevendo um programa em C++ que deve exibir na tela um número e, em seguida, adicionar texto a ele — por exemplo, «Resultado: 42». Ou você precisa salvar o ID do usuário (int) em um arquivo JSON como string. Parece simples, não é? Mas eis o problema: em C++, você não pode simplesmente escrever string s = 42;. O compilador emitirá um erro.
A pergunta «How can I convert int to string in C++?» é uma das mais populares no Stack Overflow (centenas de milhares de visualizações). E não é por acaso. Ao contrário do Python ou JavaScript, onde tudo «se converte magicamente», o C++ exige conversão explícita de tipos. Mas não se preocupe! Neste artigo, abordaremos 5 maneiras comprovadas, desde as clássicas até o moderno C++20. Você descobrirá qual método é mais rápido, qual é mais conveniente e quando usar cada um deles.
\nVamos lá!
\n\nMétodo nº1: std::to_string — moderno e simples (C++11 em diante)
\nA partir do C++11, a biblioteca padrão incluiu a função std::to_string. Esta é a maneira mais simples e legível de converter int para string em C++.
#include <iostream>\n#include <string>\n\nint main() {\n int number = 2024;\n std::string str = std::to_string(number);\n std::cout << "String: " << str << std::endl; // Saída: String: 2024\n return 0;\n}\nVantagens:
\n- \n
- Curto e claro — uma linha de código \n
- Suporta int, long, float, double e outros tipos numéricos \n
- Não requer bibliotecas adicionais (além de <string>) \n
Desvantagens:
\n- \n
- Sem controle sobre formatação (número de dígitos, zeros à esquerda) \n
- Mais lento que métodos de baixo nível, se chamado milhões de vezes \n
Quando usar: Em 90% dos casos. Para tarefas comuns, onde não é necessário um formato de saída específico, std::to_string é a escolha ideal.
Método nº2: std::stringstream — flexível como um canivete suíço
\nSe você precisa não apenas converter o número, mas também formatá-lo (adicionar espaços, alterar a base do sistema numérico), o std::stringstream vem em seu auxílio. Esta é uma classe da biblioteca <sstream> que funciona como uma «string inteligente».
#include <iostream>\n#include <sstream>\n#include <string>\n\nint main() {\n int number = 255;\n std::stringstream ss;\n ss << "Valor: " << number << " (hexadecimal: " << std::hex << number << ")";\n std::string result = ss.str();\n std::cout << result << std::endl;\n // Saída: Valor: 255 (hexadecimal: ff)\n return 0;\n}\nVantagens:
\n- \n
- Controle total sobre formatação (std::hex, std::oct, std::setw, std::setprecision) \n
- Pode concatenar strings e números «em tempo real» \n
Desvantagens:
\n- \n
- Mais lento que
std::to_stringdevido à criação do objeto stringstream \n - Requer mais código para conversão simples \n
Quando usar: Quando for necessária formatação complexa ou conversão para diferentes bases numéricas.
\n\nMétodo nº3: sprintf e snprintf — método antigo do C
\nUma maneira antiga, mas confiável, vinda da linguagem C. A função sprintf escreve uma string formatada em um array char. Em C++, também pode ser usada, mas é preciso cuidado com estouro de buffer.
#include <iostream>\n#include <cstdio> // para sprintf\n#include <cstring> // para strlen\n\nint main() {\n int number = 42;\n char buffer[50];\n sprintf(buffer, "%d", number);\n std::string str(buffer);\n std::cout << "Resultado: " << str << std::endl;\n return 0;\n}\nImportante:
Blogs
Book Recommendations
Leia também