这是关于C
编程语言的。
我有大量的二维数组(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[][]={{...},{...},...};
...
注意命名约定,所有的名字都是一样的。只有数组名称的最后一个字符会改变(如果它可以超过一个字符会更好,但这并不重要)。
好的,现在我有一个功能。它根据传递的参数选择其中一个二维数组。然后对选定的数组执行一些任务。请注意,任务是一个常见的任务,只有选定的数组被更改。
例如,根据我目前能想到的,是的switch-case,我可以实现如下功能。
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 个这样的案例?对于所有情况,内容完全相同。只有变量名的一个字符被更改。
如果有类似字符串连接的东西会很好。
#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
.
希望我的要求清楚。这件事看起来很简单,但我想不出办法摆脱它。请注意,二维数组的大小(行数/列数)不是固定的。否则我可以使用 3D 数组。
任何想法都值得赞赏。