我想用 char 来表示一个数组
说我有一个
char arrays[50]={"hello", "world"};
而不是代表第一个字符串的零索引我想要一个字母来表示它,我知道这可以在java中使用哈希表来完成这在c中是否可能
我正在考虑使用一个指针数组来引用每个字符串,但我不知道如何在一个大数组中实现它,因为我刚刚开始学习使用指针之类的
东西
char *a:
arrays[0]=&a;
如果它是必需的 achar
和字符串 ( 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");
}
首先,您的字符串数组声明不正确。在 gcc 下,这会产生以下错误:
error: excess elements in char array initializer
error: (near initialization for ‘arrays’)
因为您正在声明一个包含 50 个元素的 char 字符串(每个元素都是一个 char),并且您正在使用两个字符串对其进行初始化。
现在,如果您更改为
char *arrays[2] = {"hello", "world"};
你是说你的数组上有 2 个指针:一个指针指向“hello”字符串,另一个指针指向字符串“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 个 char 指针组成的数组,指向 2 个字符串
*(arrays[0]+0)
或arrays[0][0]
将引用字符串中的第一个1st
字符
*(arrays[0]+1)
或arrays[0][1]
将引用字符串中的第二个1st
字符
*(arrays[1]+0)
或arrays[1][0]
将引用字符串中的第一个2nd
字符
*(arrays[1]+1)
或arrays[1][1]
将引用字符串中的第二个2nd
字符
你也可以在c中使用枚举
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;
char *a[50]={"Hello", "World"};
char *a[256]={ ['H'] = "Hello", ['W'] = "World"}; \\ c99 -extension
Char 是用于索引数组的完全有效的类型。至少对于前 128 个元素。对于接下来的 128 个不被解释为负值的元素,char 必须是无符号的。