Converti Enum in String in C++

Jinku Hu 12 ottobre 2023
  1. Usa l’array const char* per convertire un Enum in una stringa in C++
  2. Usa la funzione definita personalizzata per convertire un’enumerazione in una stringa in C++
Converti Enum in String in C++

Questo articolo spiegherà diversi metodi per convertire un tipo di enumerazione in una variabile stringa in C++.

Usa l’array const char* per convertire un Enum in una stringa in C++

enum è un tipo incorporato, che può essere usato per dichiarare piccoli interi con nome solitamente formati come un array. Questo meccanismo fornisce un modo meno soggetto a errori e più leggibile per rappresentare un insieme di valori interi.

Gli elementi di enumerazione possono avere un valore di posizione (come Banana ha 0 nel nostro codice di esempio), oppure può avere un valore esplicito (dichiarato come enum Fruit { Banana = 34, ...}).

Questo esempio mostra come i valori impliciti degli elementi enum possono essere utilizzati per accedere ai valori di stringa corrispondenti da un array. Si noti che inizializziamo una variabile di input casuale con il valore compreso tra 1 e 4 all’inizio della funzione main per dimostrare meglio lo scenario del mondo reale.

#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;
}

Uscita (* casuale):

Banana Pie

Usa la funzione definita personalizzata per convertire un’enumerazione in una stringa in C++

In alternativa, possiamo definire la nostra funzione, che accetta un numero intero come parametro e restituisce un valore stringa. La variabile stringa è inizializzata con un valore const char* dall’array enum_str all’interno della funzione. Se passi il valore Total come argomento alla funzione getStringForEnum, restituirà un valore inutile poiché l’array enum_str ha solo 4 elementi.

#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;
}

Produzione:

Banana Pie

L’inclusione dell’elemento Total nel tipo enum di cui sopra può avere un utilizzo pratico. Per prima cosa, rappresenta il numero di elementi nell’enumerazione che possono essere utilizzati come un parametro di bucle, come mostrato nel seguente codice di esempio. Il primo bucle estrae ogni stringa dall’array enum_str e la inserisce nella variabile vettoriale enum_strigs. La seconda iterazione stampa il contenuto di enum_strigs sulla 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;
}

Produzione:

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

Articolo correlato - C++ Enum