我研究了只需要整数输入并返回相应值的枚举。我想实现同样的东西,但我只有字符串作为输入。我想做下面的工作 -
enum Types {
"Absolute", //"abs"
"PURE", //"PRE"
"MIXED" //"MXD"
}
可能的陈述可能是 -
string sTpes = Types("abs"); //this should return "Absolute"
或
string sTpes = Types("MXD"); //this should return "MIXED"
如果不使用枚举,请告诉我可能的方法来实现这一点。
感谢。
答案 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
第一个可以使用简单数组实现,第二个需要在排序列表中进行二进制搜索。