我想使用char来表示数组
说我有一个
char arrays[50]={"hello", "world"};
而不是代表第一个字符串的零索引我想要一个字母代表它, 我知道这可以在带有哈希表的java中完成 这可能在c
我正在考虑使用指针数组来引用每个字符串
但我不知道如何在一个大型数组中实现它,因为我刚开始学习使用指针
char *a:
arrays[0]=&a;
答案 0 :(得分:1)
如果是char
和字符串(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上的演示。
答案 1 :(得分:0)
应该是
char *arrays[2]={"hello", "world"};
现在这是一个由2个字符串指针组成的数组,指向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
字符串中的第二个字符
答案 2 :(得分:0)
你也可以在c
中使用enumhttp://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;
答案 3 :(得分:0)
char *a[50]={"Hello", "World"};
char *a[256]={ ['H'] = "Hello", ['W'] = "World"}; \\ c99 -extension
Char是一个完全有效的索引数组类型。至少对于前128个元素。对于接下来要解释的128个元素,负值char必须是无符号的。
答案 4 :(得分:0)
首先,您的字符串数组声明不正确。在gcc下,这会出现以下错误:
error: excess elements in char array initializer
error: (near initialization for ‘arrays’)
因为您声明了一个 char字符串,其中包含50个元素(每个元素都是一个字符),并且您使用两个字符串初始化它。
现在,如果你改为
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
提供,因此必须在源代码中包含此标题。)
如果您有疑问或疑问,请发表您的疑问或疑难,我相信我们可以提供帮助。