C
プログラミング言語についてです。
多数の 2D 配列 ( sizes are not fixed
) があります。次の例を検討してください。
bool sym_a[][]={{...},{...},...}; //consider these are initialized properly
bool sym_b[][]={{...},{...},...};
...
bool sym_z[][]={{...},{...},...};
bool sym_0[][]={{...},{...},...};
bool sym_1[][]={{...},{...},...};
...
bool sym_9[][]={{...},{...},...};
...
命名規則に注意してください。すべての名前は似ています。配列名の最後の文字のみが変更されます (複数の文字を使用できる場合はより適切ですが、それは重要ではありません)。
さて、これで関数ができました。渡された引数に従って、これらの 2D 配列の 1 つを選択します。次に、選択したアレイでいくつかのタスクを実行します。タスクは一般的なものであり、選択した配列のみが変更されることに注意してください。
たとえば、私が現在考えていることによると、ええ、スイッチケースでは、次のように機能を実装できます。
void doStuff(char letter){
switch(letter){
case 'a':
sym_a[0][0]=1; //just for demonstration :D
break;
case 'b':
sym_b[0][0]=1; //same thing, only the character 'a' changed to 'b'
break;
...
case 'z':
sym_z[0][0]=1;
break;
case '0':
sym_0[0][0]=1;
break;
case '1':
sym_1[0][0]=1;
break;
...
...
}
}
しかし、もっと良い方法があるはずです。そのような配列が1000個ある場合、そのようなケースを1000個書く必要がありますか?? いずれの場合も、内容はまったく同じです。変数名の 1 文字だけが変更されます。
文字列連結のようなものがあればいいのですが。
#define conc(a,b) a ## b
次にconc(sym_,a)
を表しsym_a
ます。しかし、それをここで直接適用することはできません。の右側の引数に正確な文字を渡すことができないためconc(a,b)
、目的の文字を含む変数のみを渡すことができます。
void doStuff(char letter){
conc(sym_,letter)[0][0]=1;
}
conc(sym_,letter)
を与えsym_letter
ます。sym_
しかし、文字変数の内容と連結する必要がありますletter
。
たとえば、私がdoStuff('b');
それらsym_b
を呼び出す場合は、代わりにsym_letter
.
私の要件が明確であることを願っています。これはかなり単純に思えますが、これを取り除く方法は思いつきません。2D 配列のサイズ (行/列の数) は固定されていないことに注意してください。それ以外の場合は、3D 配列を使用できたはずです。
どんな考えでも大歓迎です。