Concaténer une chaîne et un nombre en C++ : guide complet pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment concaténer std::string et int en C++ : pièges cachés

\n\n

Avez-vous déjà écrit quelque chose comme "Hello" + 42 en C++ et obtenu, au lieu du "Hello42" attendu, un étrange ensemble de caractères ? Si oui, vous n'êtes pas seul. Cette question sur Stack Overflow a recueilli des dizaines de milliers de vues, et ce n'est pas sans raison. En C++, la concaténation d'une chaîne et d'un nombre n'est pas une tâche aussi triviale qu'en Python ou JavaScript. Il faut connaître quelques astuces.

\n\n

Dans cet article, nous allons détailler 4 méthodes de concaténation de std::string et int, de la plus simple à la plus professionnelle. Vous apprendrez pourquoi str + num ne fonctionne pas, comment contourner cette limitation et quelle méthode choisir pour votre tâche. C'est parti !

\n\n

Pourquoi str + int ne fonctionne-t-il pas ? Bref rappel sur les types

\n\n

En C++, std::string est une classe, tandis que int est un type numérique natif. L'opérateur + pour std::string est surchargé, mais il attend un second opérande de type chaîne (std::string, const char* ou un caractère). Lorsque vous écrivez "Hello" + 42, le compilateur tente d'interpréter 42 comme un décalage arithmétique pour le pointeur vers le littéral de chaîne, et non comme un nombre à insérer.

\n\n

Le résultat ? Un comportement indéfini, un plantage du programme ou des données parasites en mémoire. C'est pourquoi nous avons besoin de méthodes de conversion spéciales.

\n\n

Méthode 1 : std::to_string — la plus simple (C++11 et versions ultérieures)

\n\n

Depuis C++11, la bibliothèque standard inclut l'excellente fonction std::to_string. Elle convertit n'importe quel nombre (int, float, double, long, etc.) en std::string. Ensuite, il suffit de concaténer les deux chaînes.

\n\n
#include <iostream>\n#include <string>\n\nint main() {\n    std::string text = "Le nombre Pi est approximativement égal à ";\n    int pi_int = 3;\n\n    // Convertir int en chaîne et concaténer\n    std::string result = text + std::to_string(pi_int);\n    std::cout << result << std::endl; // Affiche : Le nombre Pi est approximativement égal à 3\n\n    // On peut le faire en une seule ligne\n    std::cout << "Réponse : " + std::to_string(42) << std::endl;\n\n    return 0;\n}
\n\n

Avantages : lisible, concis, pas besoin d'inclure de bibliothèques supplémentaires (hormis <string>).
\nInconvénients : pas de contrôle du formatage (nombre de décimales, zéros non significatifs).

\n\n

Méthode 2 : std::ostringstream — le roi du formatage

\n\n

Si vous avez besoin non seulement de concaténer, mais aussi de formater le nombre (ajouter des zéros non significatifs, limiter la partie décimale), utilisez std::ostringstream du fichier d'en-tête <sstream>. Cette approche imite le fonctionnement de cout, mais stocke le résultat dans une chaîne.

\n\n
#include <iostream>\n#include <sstream>\n#include <string>\n#include <iomanip> // pour std::setw et std::setfill\n\nint main() {\n    int user_id = 7;\n    std::ostringstream oss;\n\n    // Formatage : ID avec zéros non significatifs sur 3 chiffres\n    oss << "Utilisateur #" << std::setw(3) << std::setfill('0') << user_id;\n    std::string formatted = oss.str();\n\n    std::cout << formatted << std::endl; // Affiche : Utilisateur #007\n\n    // Exemple plus complexe : nombre décimal\n    double price = 19.5;\n    std::ostringstream oss2;\n    oss2 << "Prix : " << std::fixed << std::setprecision(2) << price << " €.";\n    std::cout << oss2.str() << std::endl; // Affiche : Prix : 19.50 €.\n\n    return 0;\n}
\n\n

Avantages : contrôle total du formatage, fonctionne avec tous les types.
\nInconvénients : code plus verbeux, nécessite d'inclure <sstream> et <iomanip>.

\n\n

Méthode 3 : sprintf / snprintf — héritage du C (attention !)

\n\n

Si vous travaillez avec du code ancien ou si, pour une raison quelconque, vous ne pouvez pas utiliser

Blogs

Book Recommendations