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?因为我们有一个很大的列表,所以除了一个一个比较?最快的方法?非常感谢您。

4

2 回答 2

6

C++ 中的enumand stringor之间没有直接的转换,就像在 Java 中一样。char*

一种有效的方法是拥有一张地图:

#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::stringchar*是 ,除非您有充分的理由使用 ,否则您应该这样做char*

于 2012-04-13T12:58:11.640 回答
0

我使用的是一组 POD 结构。该结构包含与特定枚举对应的字符的枚举和 const char *。然后我使用 std::find 来查找 enum 或 char * 取决于需要哪个。

POD 数组的优点是一切都在程序加载时初始化。无需加载地图。

缺点是 std::find 的线性搜索。但这从来都不是问题,因为我从来没有大量的枚举值。

以上都隐藏在实现文件中。标题只有功能。通常一个从枚举转换为 std::string,另一个从 std::string 转换为枚举。

于 2012-04-13T13:07:20.857 回答