3

我有以下问题:

    enum Language { English, French, German, Italian, Spanish };

    int main() {

    Language tongue = German;
    tongue = static_cast<Language>(tongue + 1);

      cout << tongue;                  

}

//它返回 3 .....但我想获取索引 3 上的语言名称.....

4

4 回答 4

3

您必须创建一个与您的枚举匹配的字符串数组,例如

std::string[] LangTxt = { "English", "French", "German", "Italian", "Spanish" };

那么您可以按如下方式引用它们:

cout << LangTxt[tongue];

请注意将定义保持在一起,以便它们并排更新。

于 2012-05-14T13:09:12.933 回答
3

我发现显式查找表最适合从枚举转换为文本和将文本转换为枚举:

enum Language_Enum
{
    LANGUAGE_FIRST = 0,
    LANGUAGE_GERMAN = LANGUAGE_FIRST,
    LANGUAGE_ENGLISH,
    LANGUAGE_HOPI,
    LANGUAGE_WELSH,
    LANGUAGE_TEXAN,
    LANGUAGE_DUTCH,
    LANGUAGE_LAST
};

struct Language_Entry
{
    Language_Enum   id;
    const char *    text;
};

const Language Entry  language_table[] =
{
    {LANGUAGE_GERMAN, "German"},
    {LANGUAGE_HOPI, "Hopi"},
    {LANGUAGE_DUTCH, "Dutch"},
    // ...
};
const unsigned int language_table_size =
    sizeof(language_table) / sizeof(language_table[0]);

与文本一起指定enum,允许更改枚举顺序,而对搜索引擎的影响最小。

LANGUAGE_FIRSTLANGUAGE_LAST标识符允许枚举的迭代:

Language_Enum l;
for (l = LANGUAGE_FIRST; l < LANGUAGE_LAST; ++l)
{
    // ...
}
于 2012-05-14T13:41:34.353 回答
2

在 C++ 中打印给定枚举值的枚举名称并不是那么简单。相反,您可以使用映射或字符串数​​组来保存值,这样您就可以同时获取索引和字符串值。

于 2012-05-14T13:05:30.407 回答
0

使用枚举的最佳方法是首先为您的枚举赋予初始值。enum TestEnum { Zero=0, One, Two } 即使您不指定任何内容,默认起始索引也为零。要获得特定索引处的值,只需这样做

TestEnum(index);
于 2012-05-14T13:14:58.243 回答