字符串的Enum等价物

时间:2011-08-10 11:21:56

标签: c++ c string enums

我研究了只需要整数输入并返回相应值的枚举。我想实现同样的东西,但我只有字符串作为输入。我想做下面的工作 -

enum Types {
"Absolute", //"abs"
"PURE", //"PRE"
"MIXED" //"MXD"
}

可能的陈述可能是 -

string sTpes = Types("abs"); //this should return "Absolute"

string sTpes = Types("MXD"); //this should return "MIXED"

如果不使用枚举,请告诉我可能的方法来实现这一点。

感谢。

4 个答案:

答案 0 :(得分:5)

没有“string-enums”,但是要从一个值映射到另一个值,您可以使用std::map,这是C ++平台附带的标准模板:

#include <map>
#include <string>

int main() {
    using std::map;  using std::string;

    map<string, string> ss;
    ss["abs"] = "Absolute";

    const string foo = ss["abs"];
    std::cout << ss["abs"] << ", or " << foo << std::endl;
}

在C ++ 0x中,如果您想要“安全”访问,如果找不到密钥类型则抛出异常,请使用map::at(实际上,事实上,缺少map::at是只是对当前标准的疏忽):

    std::cout << ss.at("weird keY");

或检查它是否存在:

    if (ss.find("weird keY")==ss.end())
        std::cout << "key not found\n";

答案 1 :(得分:1)

如果你在谈论c ++ / cli,你可以使用它      Hashtable ^ openWith = gcnew Hashtable();

    // Add some elements to the hash table. There are no
    // duplicate keys, but some of the values are duplicates.
    openWith->Add("txt", "notepad.exe");
    openWith->Add("bmp", "paint.exe");
    openWith->Add("dib", "paint.exe");
    openWith->Add("rtf", "wordpad.exe");
来自http://msdn.microsoft.com/fr-fr/library/system.collections.hashtable.aspx#Y4406

否则使用stdlib中的map。

我认为您也可以使用MFC中的CMAP,这里有一篇很好的文章:http://www.codeproject.com/KB/architecture/cmap_howto.aspx

答案 2 :(得分:0)

你可以使用string.h中的字符串数组(大小为2)我认为(或者只是字符串;一个用于C,另一个用于cpp)。第一个字符串是“abs”,第二个字符串是“绝对”。

例如:

#include <string>

...

string abs[2]; //or a better name that's more relevant to you

abs[0] = "abs";
abs[1] = "absolute";

...

//pass it into the function
cout << abs[1] << endl;

...

答案 3 :(得分:0)

enum具有整数值。我个人建议两个转换函数:

  • enum -> string
  • string -> enum

第一个可以使用简单数组实现,第二个需要在排序列表中进行二进制搜索。