4

キーと可変サイズ配列の間の静的な関連付けを保存したいと思います。

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

この配列は、プログラムの実行中に変更されることはありません。これは、文字列の可変配列を文字列キーに静的に関連付ける方法にすぎません。

サブアレイの数は非常に少ない(<100)。

どうすれば純粋なCでそれを行うことができますか?

4

3 に答える 3

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 } },
};
于 2012-10-31T17:01:45.633 に答える
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関数を定義します。
  • 衝突を処理します。
  • 他のエラーを処理します。
于 2012-10-31T16:48:14.750 に答える
1

あなたの意図を正しく理解していれば、配列を文字列キーに関連付けたいと考えています。コア c の組み込み構造を使用してこれを行うことはできないと思います。つまり、c 配列は整数によってのみインデックス付けされます。

ハッシュ テーブルはいつでも作成できますが、文字列からインデックスへのマッピングはプログラマ自身が行う必要があります。

C++ ではマップを使用してこれを実現できますが、マップは STL の一部です。

于 2012-10-31T16:46:01.673 に答える