Konvertieren von Enum in String in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie ein const char*-Array, um eine Enumeration in C++ in eine Zeichenkette zu konvertieren
  2. Verwenden Sie eine benutzerdefinierte Funktion, um eine Aufzählung in eine Zeichenkette in C++ zu konvertieren
Konvertieren von Enum in String in C++

In diesem Artikel werden mehrere Methoden zur Konvertierung eines Aufzählungstyps in eine Zeichenketten-Variable in C++ erläutert.

Verwenden Sie ein const char*-Array, um eine Enumeration in C++ in eine Zeichenkette zu konvertieren

enum ist ein eingebauter Typ, der verwendet werden kann, um kleine benannte ganze Zahlen zu deklarieren, die normalerweise als Array gebildet werden. Dieser Mechanismus bietet eine weniger fehleranfällige und besser lesbare Möglichkeit, eine Menge von ganzzahligen Werten darzustellen.

Aufzählungselemente können einen Positionswert haben ( wie Banana in unserem Beispielcode 0 hat), oder sie können einen expliziten Wert haben (deklariert als enum Fruit { Banana = 34, ...}).

Dieses Beispiel zeigt, wie implizite Werte von enum-Elementen verwendet werden können, um auf entsprechende Zeichenkettenwerte aus einem Array zuzugreifen. Beachten Sie, dass wir zu Beginn der Hauptfunktion eine zufällige Eingabevariable mit dem Wert aus dem Bereich 1-4 initialisieren, um das Szenario der realen Welt besser zu veranschaulichen.

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

Ausgabe:

Banana Pie

Verwenden Sie eine benutzerdefinierte Funktion, um eine Aufzählung in eine Zeichenkette in C++ zu konvertieren

Alternativ können wir eine eigene Funktion definieren, die eine ganze Zahl als Parameter nimmt und einen Zeichenkettenwert zurückgibt. Die Zeichenkettenvariable wird mit einem const char* Wert aus dem enum_str Array innerhalb der Funktion initialisiert. Wenn Sie den Total als Argument an die Funktion getStringForEnum übergeben, wird diese einen Müllwert zurückgeben, da das Array enum_str nur 4 Elemente hat.

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

Ausgabe:

Banana Pie

Die Einbeziehung des Total-Elements in den obigen enum-Typ kann praktischen Nutzen haben. Zum einen stellt es die Anzahl der Elemente in der Aufzählung dar, die als Schleifenparameter verwendet werden können, wie im folgenden Beispielcode gezeigt wird. Die erste Schleife extrahiert jede Zeichenkette aus dem Array enum_str und schiebt sie in die Vektorvariable enum_strigs. Die zweite Iteration gibt den Inhalt von enum_strigs an die Konsole aus.

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

Ausgabe:

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

Verwandter Artikel - C++ Enum