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

  1. const char *배열을 사용하여 C++에서 열거 형을 문자열로 변환
  2. 사용자 정의 함수를 사용하여 C++에서 열거 형을 문자열로 변환

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

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

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

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

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

#include <iostream>
#include <string>
#include <chrono>

using std::cout; using std::cin;
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 <iostream>
#include <string>
#include <chrono>

using std::cout; using std::cin;
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 <iostream>
#include <string>
#include <chrono>
#include <vector>

using std::cout; using std::cin;
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