C ++:设计:我应该在这里使用枚举吗?

时间:2012-11-12 05:33:16

标签: c++ enums

C ++中首选和最好的方法是:的字母拆分为7个组,这样我以后可以询问char是否在第1,3或4组等。 ..?我当然可以想到几种方法可以做到这一点,但我想知道标准,并坚持做这种事情。

0
AEIOUHWY
1
BFPV
2
CGJKQSXZ
3
DT
4
MN
5
L

6
R

3 个答案:

答案 0 :(得分:2)

  

使用C ++实现此目的的最佳方法:将alphabeth的字母拆分为7组,以便稍后可以询问char是否在第1,3或4组中等等?

执行“拆分”本身的最有效方法是使用从letter / char到数字的数组。

//                      A  B  C  D  E  F  G  H...
const char lookup[] = { 0, 1, 2, 3, 0, 1, 2, 0...

switch / case语句是另一个合理的选择 - 编译器可以自己决定是创建数组实现还是其他方法。

目前还不清楚您打算使用哪些1-6值,但enum似乎是一种合理的编码选择。这样做的好处是仍然支持您对这些特定数值的任何使用(例如,在<比较,流......中),同时比分散在整个代码中的“魔术”数字常数更易于人类阅读和编译检查。任何宽度的常量int也可能正常工作,但不具有统一类型。

答案 1 :(得分:1)

鉴于所涉及的数据量很少,我可能会将其作为逐位查找 - 即设置值:

cat1 = 1;
cat2 = 2;
cat3 = 4;
cat4 = 8;
cat5 = 16;
cat6 = 32;
cat7 = 64;

然后只需创建一个包含26个值的数组,每个字母对应一个字母,每个值包含该字母的类别值。如果要对字母进行分类,只需categories[ch-'A']即可找到它。

答案 2 :(得分:1)

创建一个查找表。

int lookup[26] = { 0, 1, 2, 3, 0, 1, 2, 0 .... whatever };

inline int getgroup(char c)
{
    return lookup[tolower(c) - 'a'];
}

这样称呼

char myc = 'M';
int grp = lookup(myc);

为简洁起见,省略了错误检查。

当然,根据7组所代表的内容,您可以制作枚举,而不是使用0,1,2等。