这是关于C
编程语言。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[][]={{...},{...},...};
...
注意命名约定,所有的名字都是一样的。只有数组名称的最后一个字符发生更改(如果它可以多于一个字符,则更好,但这并不重要)。
好吧,现在我有一个功能。它根据传递的参数选择其中一个二维数组。然后用选定的数组做一些任务。请注意,该任务是常用任务,只有选定的数组才会更改。
例如,根据我现在可以想到的,是切换的情况下,我可以实现如下功能。
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
。
希望我的要求清楚。这件事看起来很简单,但我想不出摆脱这种方式。请注意,2D阵列的大小(行数/列数)不固定。否则,我可以使用3D数组。
任何想法是赞赏。
为什么你需要这么多的2D变量? – akshay202 2013-03-28 04:50:49
我不认为C语言有bool数据类型。您可以创建一个int数组,并使用位移运算符存储所有的bool数据。 – akshay202 2013-03-28 04:54:03
@ akshay202好吧,他们一直都不活着(你是什么意思?)。他们就像在程序中硬编码一样,只在需要时才考虑。无论如何,猜这不是问题。但你有没有看到更好的选择? 而上面的代码是我目前使用的(是的,它的工作原理)。但我需要一个简单的替代方案 – Anubis 2013-03-28 04:58:07