我想创建一个程序来切换多个字符串以避免if-else-ladder。
我的想法是创建一个链表并删除某个位置不同的每个节点。然后我可以返回它是什么参数并切换这个数字。
我的代码:
trying
int str_switch(char* query, int arg_count, ...) {
//Variables
int i, j;
struct node* args = (struct node*)calloc(arg_count, sizeof(struct node));
va_list list;
//va_list -> array
int start = 0;
//data
va_start(list, arg_count);
for (i = 0; i < arg_count; i++) {
args[i].data = va_arg(list, char*);
args[i].prev = i - 1;
args[i].next = i + 1;
}
va_end(list);
//start
args[0].prev = -1;
//end
args[arg_count - 1].next = -1;
//switch
int len = strlen(query);
for (i = 0; i <= len; i++) { //i <= len: null character is also compared
for (j = start; j != -1; j = args[j].next) {
//remove from list
if (*(args[j].data + i) != *(query + i)) {
//only one element in list
if (args[j].prev == -1 && args[j].next == -1) {
start = -1;
}
//first element
else if (args[j].prev == -1) {
start = args[j].next;
args[start].prev = -1;
}
//last element
else if (args[j].next == -1) {
args[args[j].prev].next = -1;
}
//mid element
else {
args[args[j].prev].next = args[j].next;
args[args[j].next].prev = args[j].prev;
}
}
}
}
//return
free((void*)args);
return start;
}
结构如下所示:
node
小测试程序:
struct node {
int next;
int prev;
char *data;
};
我的问题:这有效吗?我怎么能让它更有效率?我想知道这一点,因为我可能会在未来的项目中使用此代码而我不想因为一些愚蠢的错误而失去性能:)