Cómo convertir el Enum en cadena de caracteres en C++
-
Usar el array
const char*
para convertir un Enum a una cadena de caracteres en C++ - Usar la función definida por el usuario para convertir un enum a una 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
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