Comment convertir Enum en String en C++

Jinku Hu 12 octobre 2023
  1. Utilisez le tableau const char* pour convertir un type d’énumération en chaîne de caractères en C++
  2. Utiliser une fonction définie sur mesure pour convertir une énumération en chaîne de caractères en C++
Comment convertir Enum en String en C++

Cet article explique plusieurs méthodes de conversion d’un type d’énumération en une variable de type chaîne en C++.

Utilisez le tableau const char* pour convertir un type d’énumération en chaîne de caractères en C++

Le type enum est un type intégré, qui peut être utilisé pour déclarer de petits entiers nommés généralement formés sous forme de tableau. Ce mécanisme offre une façon moins sujette aux erreurs et plus lisible de représenter un ensemble de valeurs d’entiers.

Les éléments d’énumération peuvent avoir une valeur de position ( comme Banana a 0 dans notre exemple de code), ou une valeur explicite (déclarée comme enum Fruit { Banana = 34, ...}).

Cet exemple montre comment les valeurs implicites des éléments enum peuvent être utilisées pour accéder aux valeurs des chaînes correspondantes d’un tableau. Notez que nous initialisons une variable d’entrée aléatoire avec une valeur comprise entre 1 et 4 au début de la fonction main pour mieux démontrer le scénario réel.

#include <chrono>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

enum Fruit { Banana, Coconut, Mango, Carambola, Total };
static const char *enum_str[] = {"Banana Pie", "Coconut Tart", "Mango Cookie",
                                 "Carambola Crumble"};

int main() {
  std::srand(std::time(nullptr));
  int random = rand() % Total;
  auto input = static_cast<Fruit>(random);

  switch (input) {
    case Banana:
      cout << enum_str[Banana] << endl;
      break;
    case Coconut:
      cout << enum_str[Coconut] << endl;
      break;
    case Mango:
      cout << enum_str[Mango] << endl;
      break;
    case Carambola:
      cout << enum_str[Carambola] << endl;
      break;
    case Total:
      cout << "Incorrect ingredient!" << endl;
      break;
  }

  return EXIT_SUCCESS;
}

Sortie (*aléatoire):

Banana Pie

Utiliser une fonction définie sur mesure pour convertir une énumération en chaîne de caractères en C++

Nous pouvons également définir notre propre fonction, qui prend un entier comme paramètre et retourne une valeur de chaîne. La variable chaîne est initialisée avec une valeur const char* provenant du tableau enum_str à l’intérieur de la fonction. Si vous passez la valeur Total comme argument à la fonction getStringForEnum, elle retournera une valeur de la poubelle puisque le tableau enum_str n’a que 4 éléments.

#include <chrono>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

enum Fruit { Banana, Coconut, Mango, Carambola, Total };
static const char *enum_str[] = {"Banana Pie", "Coconut Tart", "Mango Cookie",
                                 "Carambola Crumble"};

string getStringForEnum(int enum_val) {
  string tmp(enum_str[enum_val]);
  return tmp;
}

int main() {
  string todays_dish = getStringForEnum(Banana);
  cout << todays_dish << endl;

  return EXIT_SUCCESS;
}

Production:

Banana Pie

L’inclusion de l’élément Total dans le type enum ci-dessus peut avoir un usage pratique. D’une part, elle représente le nombre d’éléments dans l’énumération qui peuvent être utilisés comme paramètre de boucle, comme le montre l’exemple de code suivant. La première boucle extrait chaque chaîne du tableau enum_str et les pousse vers la variable vectorielle enum_strigs. La seconde itération imprime le contenu de enum_strigs vers la console.

#include <chrono>
#include <iostream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

enum Fruit { Banana, Coconut, Mango, Carambola, Total };
static const char *enum_str[] = {"Banana Pie", "Coconut Tart", "Mango Cookie",
                                 "Carambola Crumble"};

string getStringForEnum(int enum_val) {
  string tmp(enum_str[enum_val]);
  return tmp;
}

int main() {
  vector<string> enum_strigs{};
  enum_strigs.reserve(Total);

  for (int i = 0; i < Total; ++i) {
    enum_strigs.push_back(getStringForEnum(i));
  }

  for (const auto &item : enum_strigs) {
    cout << item << endl;
  }
  return EXIT_SUCCESS;
}

Production:

Banana Pie
Coconut Tart
Mango Cookie
Carambola Crumble
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++ Enum