Como converter o Enum em String em C++

Jinku Hu 12 outubro 2023
  1. Utilize const char* Array para converter um Enum para uma String em C++
  2. Use a função definida pelo usuário para converter um Enum em uma string
Como converter o Enum em String em C++

Este artigo explicará vários métodos de conversão de um tipo de enumeração para uma variável string em C++.

Utilize const char* Array para converter um Enum para uma String em C++

O enum é um tipo embutido, que pode ser utilizado para declarar pequenos inteiros nomeados geralmente formados como uma array. Este mecanismo fornece uma forma menos sujeita a erros e mais legível de representar um array de valores inteiros.

Os elementos de enumeração podem ter um valor posicional ( como Banana tem 0 em nosso código de exemplo ), ou pode ter um valor explícito (declarado como enum Fruit { Banana = 34, ...}).

Este exemplo mostra como valores implícitos de elementos enum podem ser utilizados para acessar valores de string correspondentes a partir de um array. Observe que inicializamos a variável aleatória input com o valor de 1-4 no início da função main para demonstrar melhor o cenário do 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;
}

Saída (*random):

Banana Pie

Use a função definida pelo usuário para converter um Enum em uma string

Alternativamente, podemos definir nossa própria função, que toma um número inteiro como parâmetro e retorna um valor de string. A variável string é inicializada com um valor const char* da array enum_str dentro da função. Se você passar o valor Total como argumento para a função getStringForEnum, ele retornará algum valor de lixo, já que a array enum_str tem apenas 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

A inclusão do elemento Total no tipo enum acima pode ter uma utilização prática. Por um lado, ela representa o número de elementos na enumeração que podem ser utilizados como parâmetro de loop, como mostrado no seguinte código de exemplo. O primeiro loop extrai cada string do array enum_str e as empurra para a variável vetorial enum_strigs. A segunda iteração imprime o conteúdo de enum_strigs para o 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;
}

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

Artigo relacionado - C++ Enum