Cómo convertir el Enum en cadena de caracteres en C++

Jinku Hu 12 octubre 2023
  1. Usar el array const char* para convertir un Enum a una cadena de caracteres en C++
  2. Usar la función definida por el usuario para convertir un enum a una cadena de caracteres en C++
Cómo convertir el Enum en cadena de caracteres en C++

Este artículo explicará varios métodos para convertir un tipo de enumeración en una variable de cadena de caracteres en C++.

Usar el array const char* para convertir un Enum a una cadena de caracteres en C++

El enum es un tipo incorporado, que puede ser usado para declarar números enteros con nombre pequeño, usualmente formados como un array. Este mecanismo proporciona una forma menos propensa a errores y más legible de representar un conjunto de valores enteros.

Los elementos de la enumeración pueden tener un valor posicional ( como Banana tiene 0 en nuestro código de ejemplo ), o puede tener un valor explícito (declarado como enum Fruit { Banana = 34, ...}).

Este ejemplo muestra cómo los valores implícitos de los elementos enum pueden ser utilizados para acceder a los valores de cadena de caracteres correspondientes de un array. Observa que inicializamos la variable aleatoria “entrada” con el valor del rango 1-4 al principio de la función main para demostrar mejor el escenario del mundo real.

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

Salida (*aleatorio):

Banana Pie

Usar la función definida por el usuario para convertir un enum a una cadena de caracteres en C++

Alternativamente, podemos definir nuestra propia función, que toma un entero como parámetro y devuelve un valor de cadena. La variable string se inicializa con un valor const char* del array enum_str dentro de la función. Si pasas el valor Total como argumento a la función getStringForEnum, devolverá algún valor de basura ya que el array enum_str sólo tiene 4 elementos.

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

Resultado:

Banana Pie

La inclusión del elemento Total en el tipo enum anterior puede tener un uso práctico. Por un lado, representa el número de elementos de la enumeración que pueden ser utilizados como parámetro del bucle, como se muestra en el siguiente código de ejemplo. El primer bucle extrae cada cadena de caracteres del array enum_str y las empuja a la variable vectorial enum_strigs. La segunda iteración imprime el contenido de enum_strigs a la consola.

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

Resultado:

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

Artículo relacionado - C++ Enum