C更改数组的索引表示

时间:2012-11-06 11:41:31

标签: c arrays char

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

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

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

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

之类的东西
char *a:
arrays[0]=&a;

5 个答案:

答案 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

中使用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;

答案 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提供,因此必须在源代码中包含此标题。)

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