HOWTO · C++
Comment convertir Int en chaîne de caractères en C++
Cet article montre comment convertir un entier en chaîne de caractères en C++.
Sur cette page
Cet article présente les méthodes C++ pour convertir un int en une chaîne.
Utiliser une macro de stringing pour convertir un Int littéral en une chaîne
Cette méthode a une utilisation assez limitée lorsqu’il s’agit de convertir un int en chaîne de caractères. En effet, elle ne peut être utilisée que lorsque des valeurs numériques codées en dur doivent être converties en un type de chaîne.
Les macros sont des blocs de code auxquels le programmeur attribue un nom, et chaque fois que ce nom est utilisé, il est remplacé par une expansion de macro (la partie droite de l’instruction de macro).
Il s’agit d’une fonctionnalité du préprocesseur C/C++, ce qui signifie que vous ne pouvez l’utiliser qu’avec des valeurs littérales.
#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;
}
Production:
1234
Notez, cependant, que lorsque vous voulez chaîner le résultat d’une autre expansion de macro (dans cet exemple NUMBER qui se développe en 123123), vous devez définir une macro à deux niveaux comme indiqué dans le bloc de code suivant:
#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;
}
Production:
123123
Utilisez la méthode to_string() pour la conversion Int à String
La fonction to_string est une fonction de bibliothèque intégrée <string>, qui prend une seule valeur numérique comme argument et retourne un objet string. Cette méthode est la solution recommandée pour ce problème. Cependant, soyez conscient que le passage des valeurs à virgule float à la méthode to_string donne des résultats inattendus, comme le montre l’exemple de code suivant:
#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;
}
Production:
9876
0.000000
2.000000
Utilisez la classe std::stringstream et la méthode str() pour la conversion Int vers String
Une autre alternative pour résoudre ce problème est d’utiliser la classe stringstream, qui stocke l’instance string en interne et fournit la méthode str() pour récupérer l’objet string à partir du contenu 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;
}
Production:
9876
Utilisez la méthode std::to_chars pour la conversion Int vers String
La méthode suivante est relativement lourde par rapport à d’autres, car elle nécessite l’initialisation d’une matrice temporaire de char pour le stockage des résultats convertis. Bien que, du côté positif, cette méthode soit indépendante de la localité, elle ne nécessite pas d’attribution ni de lancement. La fonction to_chars prend la plage du tableau char et convertit l’entier en une chaîne de caractères. Une fois que les caractères sont stockés dans la variable arr, un nouvel objet string est initialisé avec l’argument 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;
}