C中数组的理想数据类型

时间:2012-10-31 16:40:22

标签: c arrays static

我想在密钥和可变大小数组之间存储静态关联。

"foo" => ["bar", "awe"]  
"foo2" => ["bar2", "awe2", "gruh"]

这个数组在程序执行期间永远不会改变,它只是一种将字符串的变量数组与字符串键静态关联的方法。

子阵列的数量非常低(<100)。

我怎样才能在纯 C

中做到这一点

3 个答案:

答案 0 :(得分:2)

好的,这是别人给我的解决方案:

struct
{
  const char *key;
  const char **values;
} key_to_values[] =
{
  { .key = "foo", .values = (const char *[]) { "val1", "val2", NULL } },
  { .key = "bar", .values = (const char *[]) { "val3", "val4", "val5", NULL } },
};

答案 1 :(得分:1)

如果我理解你的意图正确,你想要将数组与字符串键相关联,那么我认为这不可能使用核心c中的任何内置构造,​​即c数组只用整数索引。

总是可以写一个哈希表,但是字符串到索引的映射必须由程序员自己完成。

在C ++中,您可以使用映射来实现此目的,但map是STL的一部分。

答案 2 :(得分:1)

您可以使用哈希表来完成。

例如:

#include <stdint.h>
#include <string.h>

uintmax_t hash(const char *s) { /* ... */ }

static const char t[N][M];

void init_string(void)
{
    strcpy(t[hash("foo")][0], "bar");
    strcpy(t[hash("foo")][1], "awe");
    /* etc */
}

char *get_string(const char *s)
{
    return t[hash(s)];   
}

待办事项:

  • 设置NM;
  • 定义hash函数;
  • 处理碰撞;
  • 处理其他错误。