這是關於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