2016-12-05 2 views
0

Я хочу написать что-то в этом роде:Как заменить переменную char своим держателем во время выполнения?

(s[i])[i] ,where s[i] is of type char[]. 

Пример:

s[i]="PDGH"; 
for(i = 0 ; i < strlen(someNumber) ; i=i+3) 
(s[i])[formula]++; // on compile if s[i]='P', then i want to get P[formula]++ . 
+0

Возможно с помощью словаря? –

+0

'strlen (someNumber)'? 'Formula'? Мне совершенно не ясно, чего вы хотите достичь. –

+0

Я хочу, чтобы мой код заменил s [i] на его значение при компиляции, например, если у меня есть 4 вектора: int A [100], B [100], C [100] .D [100], я мог бы сделать (s [i]) [число], где s [i] может получить только значения A, B, C, D (так происходит анализ синтаксиса), поэтому в конце это похоже на запись A [число] или B [число] и т. д., без явного написания имен A [число], B [число] и т. д. – user5731286

ответ

1

Что вы просите, чтобы отобразить строку (ну, в вашем случае один символ) к переменная в C. Это не поддерживается непосредственно языком. Тем не менее, вы можете использовать свой выбор реализации ассоциативного массива, для которого существует множество вариантов - см. Здесь: Looking for a good hash table implementation in C

Или, поскольку в вашем примере у вас есть только односимвольные переменные (P, D, G, H) , вы можете построить таблицу поиска:

int P=0, D=0, G=0, H=0; 
int* targets[256] = {}; 
targets['P'] = &P; 
targets['D'] = &D; 
targets['G'] = &G; 
targets['H'] = &H; 

for (size_t i = 0; i < strlen(s); i += 3) { 
    assert(targets[s[i]]); 
    (*targets[s[i]])++; /* if s[i] == 'P', increment P */ 
} 
+0

спасибо! это именно то, что я искал – user5731286

Смежные вопросы