C++에서 열거 형을 문자열로 변환하는 방법

Jinku Hu 2023년10월12일
  1. const char *배열을 사용하여 C++에서 열거 형을 문자열로 변환
  2. 사용자 정의 함수를 사용하여 C++에서 열거 형을 문자열로 변환
C++에서 열거 형을 문자열로 변환하는 방법

이 기사에서는 C++에서 열거 형을 문자열 변수로 변환하는 몇 가지 방법을 설명합니다.

const char *배열을 사용하여 C++에서 열거 형을 문자열로 변환

enum은 내장형으로, 일반적으로 배열로 형성된 작은 이름의 정수를 선언하는 데 사용할 수 있습니다. 이 메커니즘은 정수 값 세트를 표시하는 오류 발생 가능성이 적고 읽기 쉬운 방법을 제공합니다.

열거 형 요소는 위치 값 (예 : Banana의 예제 코드에서 0이 있음) 또는 명시 적 값 ( enum Fruit {Banana = 34, ...}로 선언 됨)을 가질 수 있습니다.

이 예는enum 요소의 암시 적 값을 사용하여 배열에서 해당 문자열 값에 액세스하는 방법을 보여줍니다. 실제 시나리오를 더 잘 보여주기 위해main 함수의 시작 부분에서 1-4 범위의 값으로 임의의input 변수를 초기화합니다.

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

출력:

Banana Pie

사용자 정의 함수를 사용하여 C++에서 열거 형을 문자열로 변환

또는 정수를 매개 변수로 사용하고 문자열 값을 반환하는 자체 함수를 정의 할 수 있습니다. 문자열 변수는 함수 내에서enum_str 배열의const char*값으로 초기화됩니다. Total 값을getStringForEnum 함수에 인수로 전달하면enum_str 배열에 4 개의 요소 만 있으므로 일부 가비지 값을 반환합니다.

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

출력:

Banana Pie

위의enum 유형에Total 요소를 포함하면 실용적인 용도로 사용할 수 있습니다. 한 가지 예로, 다음 샘플 코드와 같이 루프 매개 변수로 사용할 수있는 열거 형 요소의 수를 나타냅니다. 첫 번째 루프는enum_str 배열에서 모든 문자열을 추출하여enum_strigs 벡터 변수로 푸시합니다. 두 번째 반복은enum_strigs의 내용을 콘솔에 출력합니다.

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

출력:

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

관련 문장 - C++ Enum