C++ 返回值为enum的地址数组

C++ 返回值为enum的地址数组,c++,arrays,enums,C++,Arrays,Enums,这是我的问题: 我定义了一些价值观: enum HarmCons { val1 = 0, val2 = 2, val3 = 4, val4 = 6 }; 我有一个数组 int foo [7] = { 16, 2, 77, 40, 1222, 34, 5}; 我从输入文件中读取的。我还有这个: char types[15] = "val1,val3,val4"; 现在我想用逗号分隔字符串,并在循环中对foo中的条目进行寻址。所以字符串的第一部分是val1,它应该返回16。

这是我的问题: 我定义了一些价值观:

enum HarmCons
{
  val1 = 0,
  val2 = 2,
  val3 = 4,
  val4 = 6
};
我有一个数组

int foo [7] = { 16, 2, 77, 40, 1222, 34, 5};  
我从输入文件中读取的。我还有这个:

char types[15] = "val1,val3,val4";
现在我想用逗号分隔字符串,并在循环中对foo中的条目进行寻址。所以字符串的第一部分是val1,它应该返回16。 我试过foo[val1] 这很好用。问题是,通过分隔字符串,我总是会得到一个字符串或其他东西,而我不能用字符串来寻址数组。
有没有可能用我可以使用结果寻址数组的方式来分隔字符串?

这里有一种方法

一些注意事项:

用特殊函子实现的转换函数

用小函数表示的逻辑

内联注释

-


看来你是想用锤子敲螺丝。数组是一种很好的数据结构,但并不适合所有问题

将始终获取字符串或其他内容,而我无法通过字符串寻址数组

事实上,你不能。所以你需要的不是数组。似乎有一个从字符串到整数的映射。这种映射的数据结构是。。。地图也称为关联数组、字典等


标准库为您提供了一个实现:std::map。根据您的使用情况,您可能希望使用映射替换枚举或数组。

如果您确实希望拆分字符串,您可以这样做,只需将最后的字符与描述为字符的数字进行比较。 有点像这样:

If ( char1 == '1')
    Then set a int var to 1
用一个循环来做同样的事情,但是随着十,百,等等的增加,0的数量也在增加。 然后可以使用该int变量访问数组。
然而,切换情况可能比实现语句更好的实现方式。

这些名称总是像Val1、Val2、Val3那样顺序,或者它们有间隙还是不被排序或不遵循这样的固定模式?在C++中没有对字符串到EnM的反射,可以查看库来帮助这部分。有13种可能的名称,它不是一个固定数量的名字,也不是有序的。事实上,去掉枚举并使用映射直接解决了这个问题,没有任何麻烦+1.
16
1222
5
If ( char1 == '1')
    Then set a int var to 1