C中的代数数据类型相当于什么?

7

我正在编写一个程序,它可以读取数据流并将其解析为一些值:整数、浮点数、字符或包含一组值(可以嵌套)的复合值。我该如何在C语言中表示它?我考虑使用一个联合体来存放intfloatchar,然后对于复合值,使用指向这些联合体的指针数组,但是这样无法嵌套。


1
简短回答 - 不要在C语言中尝试这个 :) - Hamish Grubijan
你打算如何处理这个数据流? - pmod
你可以包含一个指向联合体下一个实例的指针来存储值列表。 - Leonid
@Pmod:处理并写入文件。(流本身就是一个二进制文件。)我已经编写了一份直接写入数据而不存储数据的版本,但这使得处理变得笨拙。 - Igor
@Hamish:我越想越倾向于使用Haskell。 - Igor
那么你打算用这些值做什么? - Ciro Santilli OurBigBook.com
2个回答

4

(我想象你正在解析一个XML文件)

我们假设你有一堆节点。每个节点都可以具有值,它可以是一组兄弟中的一个,并且它可能有子节点。这将给您一个结构体,如下:

 struct Node
 {
       DATA Value;
       DATATYPE  Type;
       Node* nextSibling;
       Node* firstChild;
 };

DATA可以像你描述的那样是一个联合体,也可以是单独的变量。然而,因为你将以与存储方式相同的形式读取其中的值,所以使用联合体应该没问题。DATATYPE应该是一个枚举。


1

你的意思是用char而不是char[]吗?所有char值都可以存储在一个int中。事实上,你想要的所有int值(以及您机器上所有可能的int值)都可以由double精确表示。

因此,我建议使用节点中带有double负载的树结构。如有必要,使用enum来区分类型。您可以使用单个子指针和单个链接列表“next”指针表示n叉树……维基百科上有一个图表,但我找不到它:v(。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接