我正在编写一个程序,它可以读取数据流并将其解析为一些值:整数、浮点数、字符或包含一组值(可以嵌套)的复合值。我该如何在C语言中表示它?我考虑使用一个联合体来存放int
、float
、char
,然后对于复合值,使用指向这些联合体的指针数组,但是这样无法嵌套。
我正在编写一个程序,它可以读取数据流并将其解析为一些值:整数、浮点数、字符或包含一组值(可以嵌套)的复合值。我该如何在C语言中表示它?我考虑使用一个联合体来存放int
、float
、char
,然后对于复合值,使用指向这些联合体的指针数组,但是这样无法嵌套。
(我想象你正在解析一个XML文件)
我们假设你有一堆节点。每个节点都可以具有值,它可以是一组兄弟中的一个,并且它可能有子节点。这将给您一个结构体,如下:
struct Node
{
DATA Value;
DATATYPE Type;
Node* nextSibling;
Node* firstChild;
};
DATA
可以像你描述的那样是一个联合体,也可以是单独的变量。然而,因为你将以与存储方式相同的形式读取其中的值,所以使用联合体应该没问题。DATATYPE
应该是一个枚举。
你的意思是用char
而不是char[]
吗?所有char
值都可以存储在一个int
中。事实上,你想要的所有int
值(以及您机器上所有可能的int
值)都可以由double
精确表示。
因此,我建议使用节点中带有double
负载的树结构。如有必要,使用enum
来区分类型。您可以使用单个子指针和单个链接列表“next”指针表示n叉树……维基百科上有一个图表,但我找不到它:v(。