char を使用して配列を表したい
char arrays[50]={"hello", "world"};
最初の文字列を表すゼロインデックスの代わりに、それを表す文字が必要です。これはJavaでハッシュテーブルを使用して実行できることを知っています。これはcで可能です
ポインターの配列を使用して各文字列を参照することを考えていますが、ポインターの使用を学習し始めたばかりなので、大きな配列に実装する方法がわかりませ
ん
char *a:
arrays[0]=&a;
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でデモを参照してください。
char *a[50]={"Hello", "World"};
char *a[256]={ ['H'] = "Hello", ['W'] = "World"}; \\ c99 -extension
Char は、配列のインデックス付けに完全に有効な型です。少なくとも最初の 128 要素については。次の 128 要素が負の値と解釈されないようにするには、char を unsigned にする必要があります。
まず、文字列配列の宣言が正しくありません。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
ため、ソース コードにこのヘッダーを含める必要があります)。
疑問や困難がある場合は投稿してください。きっとお役に立てると思います。
そのはず
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
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;