C ++中首选和最好的方法是:将
0
AEIOUHWY
1
BFPV
2
CGJKQSXZ
3
DT
4
MN
5
L

6
R
答案 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等。