1


char を使用して配列を表したい

char arrays[50]={"hello", "world"};

最初の文字列を表すゼロインデックスの代わりに、それを表す文字が必要です。これはJavaでハッシュテーブルを使用して実行できることを知っています。これはcで可能です

ポインターの配列を使用して各文字列を参照することを考えていますが、ポインターの使用を学習し始めたばかりなので、大きな配列に実装する方法がわかりませ

char *a:
arrays[0]=&a;
4

5 に答える 5

1

char必要な aと文字列 ( ) の間のマッピングである場合は、ペアを含むchar*単純なものを作成できます。struct

struct entry
{
    char key;
    const char* value;
};

マップの内容がコンパイル時にわかっている場合:

const struct entry map[] =
    {
        { 'a', "a.text" },
        { 'b', "b.text" },
        { 'c', "c.text" },
        { 'd', "d.text" },
        { 'e', "e.text" }
    };

エントリの順序を維持することで、エントリbsearch()を見つけるために使用できます。

int compare(const void* l, const void* r)
{
    const struct entry* ll = (const struct entry*)l;
    const struct entry* rr = (const struct entry*)r;

    return ll->key - rr->key;
}

struct entry find = { 'd' };

struct entry* e = bsearch(&find,
                          map,
                          sizeof(map)/sizeof(map[0]),
                          sizeof(map[0]),
                          compare);

if (e)
{
    printf("{%c, %s}\n", e->key, e->value);
}
else
{
    printf("Not found\n");
}

http://ideone.com/x6roRmでデモを参照してください。

于 2012-11-06T11:58:46.880 に答える
0
char *a[50]={"Hello", "World"};

char *a[256]={ ['H'] = "Hello", ['W'] = "World"};  \\ c99 -extension

Char は、配列のインデックス付けに完全に有効な型です。少なくとも最初の 128 要素については。次の 128 要素が負の値と解釈されないようにするには、char を unsigned にする必要があります。

于 2012-11-06T11:51:07.500 に答える
0

まず、文字列配列の宣言が正しくありません。gcc では、これにより次のエラーが発生します。

error: excess elements in char array initializer          
error: (near initialization for ‘arrays’)

50 個の要素 (各要素は 1 文字) を持つ1 つのchar 文字列を宣言し、 2 つの文字列で初期化しているためです。

今あなたがに変更する場合

char *arrays[2] = {"hello", "world"};

配列に 2 つのポインターがあると言っています。1 つのポインターは "hello" 文字列を指し、もう 1 つのポインターは文字列 "world" を指します。それらが指す値を出力することで、これが真であることを確認できます。

printf("array content: %s - %s\n", arrays[0], arrays[1]);

これは印刷されます

array content: hello - world

数値ではなくリテラルでインデックスを作成する場合、最も簡単な方法は、必要な文字列に文字キーを割り当てることができるマップを作成することだと思います。hmjd によって提供される回答を参照してください (通知bsearch()はによって提供されるstdlib.hため、ソース コードにこのヘッダーを含める必要があります)。

疑問や困難がある場合は投稿してください。きっとお役に立てると思います。

于 2012-11-06T12:46:08.770 に答える
0

そのはず

char *arrays[2]={"hello", "world"};

これは、2 つの文字列を指す 2 つの char ポインターの配列になりました。

*(arrays[0]+0)または文字列arrays[0][0]の最初の文字を参照します1st

*(arrays[0]+1)または、文字列arrays[0][1]の 2 番目の文字を参照します1st

*(arrays[1]+0)または文字列arrays[1][0]の最初の文字を参照します2nd

*(arrays[1]+1)または、文字列arrays[1][1]の 2 番目の文字を参照します2nd

于 2012-11-06T11:49:15.773 に答える
0

cでenumを使用することもできます

http://msdn.microsoft.com/en-us/library/whbyts4t%28v=vs.80%29.aspx

  enum DAY            /* Defines an enumeration type    */
 {
    saturday,       /* Names day and declares a       */
    sunday = 0,     /* variable named workday with    */ 
    monday,         /* that type                      */
    tuesday,
    wednesday,      /* wednesday is associated with 3 */
    thursday,
    friday
 } workday;
于 2012-11-06T11:49:33.213 に答える