これを行うためのC++での推奨される最良の方法は何ですか:アルファベットの文字を7つのグループに分割して、後でcharがグループ1、3、または4などにあるかどうかを尋ねることができます...?もちろん、これを自分で行う方法はいくつか考えられますが、このようなことを行うときは、標準を知り、それを守りたいと思います。
0
AEIOUHWY
1
BFPV
2
CGJKQSXZ
3
DT
4
MN
5
L

6
R
C++ でこれを行う最善の方法: アルファベットの文字を 7 つのグループに分割して、後で char がグループ 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 つの妥当な選択です。コンパイラは、配列の実装を作成するか、他のアプローチを作成するかを決定できます。
これらの 1 ~ 6 の値をどのように使用する予定かは不明ですenum
が、適切なエンコーディングの選択肢のようです。これには、コード全体に散在する「魔法の」数値定数よりも人間が読みやすく、コンパイラでチェックされる一方で、これらの特定の数値 (たとえば、< 比較、ストリーミングなど) の使用を引き続きサポートするという利点があります。任意の幅の定数 int も正常に機能する可能性がありますが、統一型はありません。
関連する少量のデータを考えると、おそらくビット単位のルックアップ、つまり値を設定することになります。
cat1 = 1;
cat2 = 2;
cat3 = 4;
cat4 = 8;
cat5 = 16;
cat6 = 32;
cat7 = 64;
次に、アルファベットの各文字に 1 つずつ、26 個の値の配列を作成し、それぞれにその文字のカテゴリの値を含めます。手紙を分類したいときは、categories[ch-'A']
それを見つけるだけです。
ルックアップ テーブルを作成します。
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 などを使用する代わりに列挙型を作成できます。