gpt4 book ai didi

c - 在 C 中,如何使用字符串数组作为查找表?

转载 作者:行者123 更新时间:2023-12-04 03:01:02 25 4
gpt4 key购买 nike

我太难了。我正在学习 C 并有这个问题:

如何使用字符串数组作为查找表?

我有一个“键”列表:

"A", "A#", "B", "Bb", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"

并且每个都将引用一个特定的 int“值”(不是唯一的)。例如“A”-> 9“A#”-> 10“Bb”-> 10

我找到了一个答案 ( store known key/value pairs in c ),当它说“我会......建议只使用一个字符串数组作为查找表”时,我认为它为我指明了正确的方向

但我不知道如何将字符串数组实际实现为查找表?

最佳答案

由于您打算将字符串用作具有整数值的键,因此最好使用 struct 来包含这样的一对。然后建立一个表。最后,由于您一直小心地保持键的排序顺序,您可以使用 C 库函数 bsearch 进行查找:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct pair {
char *key;
int value;
} PAIR;

// Key strings must be in strcmp() sorted order!
PAIR table[] = {
{"A", 9}, {"A#", 10}, {"B", 11}, {"Bb", 10}, {"C", 11}, {"C#", 12}, {"D", 13},
{"D#", 14}, {"E", 15}, {"F", 16}, {"F#", 17}, {"G", 18}, {"G#", 19},
};

static int compare_keys(const void *va, const void *vb) {
const PAIR *a = va, *b = vb;
return strcmp(a->key, b->key);
}

int get_value(char *key) {
PAIR key_pair[1] = {{key}};
PAIR *pair = bsearch(key_pair, table,
sizeof table / sizeof table[0], sizeof table[0], compare_keys);
return pair ? pair->value : -1;
}

int main(void) {
// Partial test: verify we can look up all the valid keys.
for (int i = 0; i < sizeof table / sizeof table[0]; ++i) {
int value = get_value(table[i].key);
printf("%s -> %d\n", table[i].key, value);
}
return 0;
}

关于c - 在 C 中,如何使用字符串数组作为查找表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com