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

列挙型からテキストへの変換とテキストから列挙型への変換の両方で、明示的なルックアップテーブルが最適であることがわかりました。

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_FIRSTおよびLANGUAGE_LAST識別子により、列挙型の反復が可能になります。

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

列挙型に一致する文字列の配列を作成する必要があります。

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

次に、次のように参照できます。

cout << LangTxt[tongue];

ただし、定義が並行して更新されるように注意してください。

于 2012-05-14T13:09:12.933 に答える
2

C++ で特定の列挙値の列挙名を出力するのはそれほど単純ではありません。代わりに、マップまたは文字列配列を使用して値を保持できます。これにより、インデックスと文字列値の両方を取得できます。

于 2012-05-14T13:05:30.407 に答える
0

列挙型を使用する最良の方法は、最初に列挙型に初期値を与えることです。enum TestEnum { Zero=0, One, Two } 何も指定しなくても、デフォルトの開始インデックスはゼロです。特定のインデックスの値を取得するには、単純にそれを行います

TestEnum(index);
于 2012-05-14T13:14:58.243 に答える