Concatenando string e int em C++: guia completo para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como juntar std::string e int em C++: armadilhas não óbvias

\n\n

Você já escreveu algo como "Hello" + 42 em C++ e obteve, em vez do esperado "Hello42", um conjunto estranho de caracteres? Se sim — você não está sozinho. Esta pergunta no Stack Overflow acumulou dezenas de milhares de visualizações, e não é à toa. Em C++, a concatenação de uma string e um número não é uma tarefa tão trivial quanto em Python ou JavaScript. Aqui, você precisa conhecer alguns truques.

\n\n

Neste artigo, vamos abordar 4 maneiras de concatenar std::string e int, da mais simples à mais profissional. Você aprenderá por que str + num não funciona, como contornar essa limitação e qual método escolher para sua tarefa. Vamos lá!

\n\n

Por que str + int não funciona? Breve explicação sobre tipos

\n\n

Em C++, std::string é uma classe, e int é um tipo numérico nativo. O operador + para std::string está sobrecarregado, mas ele espera que o segundo operando também seja do tipo string (std::string, const char* ou um caractere). Quando você escreve "Hello" + 42, o compilador tenta interpretar 42 como um deslocamento aritmético para o ponteiro do literal de string, e não como um número para inserção.

\n\n

O resultado? Comportamento indefinido, travamento do programa ou lixo na memória. É por isso que precisamos de métodos especiais de conversão.

\n\n

Método 1: std::to_string — o mais simples (C++11 e posteriores)

\n\n

A partir do C++11, a biblioteca padrão inclui a excelente função std::to_string. Ela converte qualquer número (int, float, double, long, etc.) em std::string. Depois disso, é uma simples concatenação de duas strings.

\n\n
#include <iostream>\n#include <string>\n\nint main() {\n    std::string text = "O número Pi é aproximadamente ";\n    int pi_int = 3;\n\n    // Converte int para string e concatena\n    std::string result = text + std::to_string(pi_int);\n    std::cout << result << std::endl; // Saída: O número Pi é aproximadamente 3\n\n    // Pode ser feito em uma única linha\n    std::cout << "Resposta: " + std::to_string(42) << std::endl;\n\n    return 0;\n}
\n\n

Vantagens: legível, conciso, não requer bibliotecas adicionais (além de <string>).
\nDesvantagens: sem controle de formatação (número de casas decimais, zeros à esquerda).

\n\n

Método 2: std::ostringstream — o rei da formatação

\n\n

Se você precisa não apenas concatenar, mas também formatar o número (adicionar zeros à esquerda, limitar a parte fracionária), use std::ostringstream do arquivo de cabeçalho <sstream>. Esta abordagem imita o funcionamento do cout, mas salva o resultado em uma string.

\n\n
#include <iostream>\n#include <sstream>\n#include <string>\n#include <iomanip> // para std::setw e std::setfill\n\nint main() {\n    int user_id = 7;\n    std::ostringstream oss;\n\n    // Formata: ID com zeros à esquerda até 3 dígitos\n    oss << "Usuário #" << std::setw(3) << std::setfill('0') << user_id;\n    std::string formatted = oss.str();\n\n    std::cout << formatted << std::endl; // Saída: Usuário #007\n\n    // Exemplo mais complexo: número decimal\n    double price = 19.5;\n    std::ostringstream oss2;\n    oss2 << "Preço: " << std::fixed << std::setprecision(2) << price << " reais.";\n    std::cout << oss2.str() << std::endl; // Saída: Preço: 19.50 reais.\n\n    return 0;\n}
\n\n

Vantagens: controle total de formatação, funciona com qualquer tipo.
\nDesvantagens: código mais verboso, requer inclusão de <sstream> e <iomanip>.

\n\n

Método 3: sprintf / snprintf — herança do C (cuidado!)

\n\n

Se você trabalha com código antigo ou por algum motivo não pode usar

Blogs

Book Recommendations