哈希表可能是我解决这个特定问题的选择。它将提供O(1)
对您大小的表的查找。不过,trie 也是一个不错的选择。
但是,最简单的实现方法是将单词按字母顺序放在一个数组中,然后bsearch
从 C 库中使用。它应该几乎和哈希或特里一样快,因为您只处理 30 个单词。它实际上可能比哈希表更快,因为您不必计算哈希值。
Steve Jessop 的想法是一个很好的想法,将您的字符串首尾相连地排列在相同大小的字符数组中。
const char keywords[][MAX_KEYWORD_LEN+1] = {
"auto", "break", "case", /* ... */, "while"
};
#define NUM_KEYWORDS sizeof(keywords)/sizeof(keywords[0])
int keyword_cmp (const void *a, const void *b) {
return strcmp(a, b);
}
const char *kw = bsearch(word, keywords, NUM_KEYWORDS, sizeof(keywords[0]),
keyword_cmp);
int kw_index = (kw ? (const char (*)[MAX_KEYWORD_LEN+1])kw - keywords : -1);
如果您还没有它,您应该考虑获取一份编译器:原理、技术和工具。由于它的封面,它通常被称为龙书。