C语言中的结构与词典

C语言中的结构与词典,c,C,如何在C中创建以下类型的词典 back={{(0,2,"ADJ"):("NP+V","ADJ",0)},{(0,2,"U"):("NP",".",1)}} 我创建了如下结构: struct bp { char s[20]; char s1[20]; int i; }; struct bp arr[3][3][3]; struct val; val.s="NP+D"; val.s1="ADJ"; val.i=0; arr[0][2]["ADJ"]=val;

如何在C中创建以下类型的词典

back={{(0,2,"ADJ"):("NP+V","ADJ",0)},{(0,2,"U"):("NP",".",1)}}
我创建了如下结构:

struct bp
{
   char s[20];

   char s1[20];

   int i;

};

struct bp arr[3][3][3];

struct val;

val.s="NP+D";

val.s1="ADJ";

val.i=0;

arr[0][2]["ADJ"]=val;
但此方法不正确,因为arr中的数组下标不能是字符串


有人能给出这个问题的解决方案吗?

用整数索引数组是一种简单的数学乘法/加法,通常对应于一个或两个汇编指令。记住,这就是C语言擅长的:非常低级别、低开销的代码。通过诸如字符串之类的其他“对象”访问集合并不是计算机本机“知道如何做”的事情。它由语言/运行时/标准库实现

语言及其标准库(如Java、C#、Python等)中的“字典”通常被实现为。没有C语言的“标准”实现。您将不得不使用其他库,或者,如果您有一个好的挑战,请编写自己的库


在C语言中实现Pythonesque“字典”,用于:

back={{(0,2,"ADJ"):("NP+V","ADJ",0)},{(0,2,"U"):("NP",".",1)}}
您将需要两种结构类型(一种用于左手键,一种用于右手值),或者您将需要对所有内容使用字符串

将代码用作松散的基础,您可能会:

struct ap
{
   int i1;
   int i2;
   char s1[20];
};

struct bp
{
   char s1[20];
   char s2[20];
   int i1;
};
也许:

struct Dictionary
{
    struct ap key;
    struct bp value;
};
然后可以使用初始值设定项:

struct Dictionary oed[] =
{
    { { 0, 2, "ADJ" }, { "NP+V", "ADJ", 0 } },
    { { 0, 2, "U"   }, { "NP",   ".",   1 } },
};
如果需要创建和填充结构,可以使用C99复合文字:

struct Dictionary chambers = (struct Dictionary){ { 0, 2, "ADJ" }, { "NP+V", "ADJ", 0 } };
或者零碎地完成作业:

struct Dictionary merriam;

merriam.key   = (struct ap){ 0, 2, "ADJ" };
merriam.value = (struct bp){ "NP+V", "ADJ", 0 };
或者一次完成一名成员的任务:

struct Dictionary webster;

webster.key.i1 = 0;
webster.key.i2 = 2
strcpy(webster.key.s1, "ADJ");
strcpy(webster.value.s1, "NP+V");
strcpy(webster.value.s2, "ADJ");
webster.value.i1 = 0;
请注意,此大纲仅涉及存储数据。它不处理散列键值或其他奇特(必要)的内存管理。代码假定字符串将匹配;它应该检查字符串是否合适


然而,没有标准的C库来管理这样的结构;你要么自己写,要么借用别人的库。

c中的词典?O.oC没有内置字典类型。您必须使用第三方库。