1

我想用 char 来表示一个数组
说我有一个

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

而不是代表第一个字符串的零索引我想要一个字母来表示它,我知道这可以在java中使用哈希表来完成这在c中是否可能

我正在考虑使用一个指针数组来引用每个字符串,但我不知道如何在一个大数组中实现它,因为我刚刚开始学习使用指针之类的
东西

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

5 回答 5

1

如果它是必需的 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");
}

请参阅http://ideone.com/x6roRm上的演示。

于 2012-11-06T11:58:46.880 回答
0

首先,您的字符串数组声明不正确。在 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必须在源代码中包含此标头)。

如果您有疑问或困难,请发表您的意见,我相信我们可以提供帮助。

于 2012-11-06T12:46:08.770 回答
0

它应该是

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字符

于 2012-11-06T11:49:15.773 回答
0

你也可以在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;
于 2012-11-06T11:49:33.213 回答
0
char *a[50]={"Hello", "World"};

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

Char 是用于索引数组的完全有效的类型。至少对于前 128 个元素。对于接下来的 128 个不被解释为负值的元素,char 必须是无符号的。

于 2012-11-06T11:51:07.500 回答