C语言中的结构与词典
如何在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;
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语言的“标准”实现。您将不得不使用其他库,或者,如果您有一个好的挑战,请编写自己的库
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没有内置字典类型。您必须使用第三方库。