Вы не можете - switch
операторы в C работают только на примитивных типах, а не на строках.Вы могли бы использовать, скажем, хеш-таблицу или дерево поиска для оптимизации соответствия, но только для 20 вариантов, которые могут не стоить проблем.
Что вы можете сделать, чтобы очиститьвверх по коду, создайте таблицу сопоставления:
struct str2Num {
char *str;
int num;
};
const struct str2Num registerMap[] = {
{ "zero", 00000 },
{ "at", 00001 },
{ "v0", 00010 },
{ "v1", 00011 },
{ NULL, 0 } /* end marker */
};
и выполните сопоставление следующим образом:
int i;
for (i = 0; registerMap[i].str != NULL; i++) {
if (strcmp(registerName, registerMap[i].str) == 0) {
return registerMap[i].num;
}
}
/* handle no-match case here */
Фактически, если вы отсортировали таблицу по алфавиту, вы могли бы даже использоватьbsearch()
для быстрого сопоставления.