0

C++ 中首选和最好的方法是什么:将字母分成 7 组,以便稍后我可以询问 char 是否在第 1、3 或 4 组等中...?我当然可以自己想出几种方法,但我想知道标准并在做这种事情时坚持下去。

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

6
R
4

3 回答 3

2

C++ 中最好的方法:将字母分成 7 组,这样我以后可以问一个字符是否在第 1、3 或 4 组等中......?

进行“拆分”本身的最有效方法是拥有一个从字母/字符到数字的数组。

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

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

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

于 2012-11-12T05:46:18.330 回答
1

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

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

然后只需创建一个包含 26 个值的数组,每个值对应字母表中的每个字母,每个值都包含该字母的类别值。当你想对一个字母进行分类时,你只是categories[ch-'A']为了找到它。

于 2012-11-12T05:47:02.970 回答
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 等。

于 2012-11-12T05:47:51.543 回答