0

これがC ++にある場合:

typedef enum {Unknown,USA,Canada,France,England,Italy,Spain,Australia,} origin_t;

origin_t Country;
char *current;
cin>>current;

Countryユーザーが入力した c-Stringに設定するにはどうすればよいcurrentでしょうか? リストが大きいので、1つずつ比較する以外に? 最速の方法?どうもありがとうございます。

4

2 に答える 2

6

Javaの場合のように、C++間またはC++での直接変換はありませんenumstringchar*

効率的な方法は、マップを作成することです。

#include <map>
#include <string>

typedef enum {Unknown,USA,Canada,France,England,Italy,Spain,Australia,} origin_t;

std::map<std::string, origin_t> countries;
countries["Unknown"] = Unknown;
countries["USA"] = USA;
//...

origin_t Country;
std::string current;
cin>>current;
Country = countries[current];

私のサンプルでは、std::string​​の代わりにを使用していることに注意してくださいchar*。これは、を使用する強い理由がない限り、実行する必要がありますchar*

于 2012-04-13T12:58:11.640 に答える
0

私が使用するのは、POD 構造体の配列です。構造体には、列挙型と、特定の列挙型に対応する文字の const char * が含まれます。次に、 std::find を使用して、必要に応じて enum または char * を検索します。

POD の配列の利点は、プログラムのロード時にすべてが初期化されることです。マップをロードする必要はありません。

欠点は、std::find の線形検索です。しかし、多数の列挙値を使用したことがないので、これは問題ではありませんでした。

上記はすべて実装ファイルに隠されています。ヘッダーには関数だけがあります。通常、1 つは enum から std::string に変換し、もう 1 つは std::string から enum に変換します。

于 2012-04-13T13:07:20.857 に答える