Comment convertir Int en chaîne de caractères en C++

Jinku Hu 12 octobre 2023
  1. Utiliser une macro de stringing pour convertir un Int littéral en une chaîne
  2. Utilisez la méthode to_string() pour la conversion Int à String
  3. Utilisez la classe std::stringstream et la méthode str() pour la conversion Int vers String
  4. Utilisez la méthode std::to_chars pour la conversion Int vers String
Comment convertir Int en chaîne de caractères en C++

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;
}
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ Integer