我需要在ADA中实现一个链接列表,其中包含3个部分的节点,其中包括: 1.节点的名称 2.节点的值 3.下一个节点的名称
我需要从用户那里获取输入,节点的每个部分都以“;”
结尾e.g
这是命令行上的输入必须是
一个; 22,B B; 33; C ^ ℃; 43
LL结束于c。所以我们在值
之后什么都没有我可以实现一个LL,但我怎么读这个';'在输入中并动态地将其分配给相应的节点以构建链表???
答案 0 :(得分:1)
假设您有一个字符串Input
,其中包含您的一个节点'数据(例如,”a;22;b”
),您可以使用
First_Semicolon : Natural :=
Ada.Strings.Fixed.Index (Source => Input,
Pattern => ";”,
From => Input'First);
和使用
的最后一个分号Last_Semicolon : Natural :=
Ada.Strings.Fixed.Index (Source => Input,
Pattern => ";",
From => Input'Last,
Going => Ada.Strings.Backward);
节点Name
则是从第一个分号开头到第一个分号之前的输入的子串,
Input (Input'First .. First_Semicolon - 1)
如果First_Semicolon
和Last_Semicolon
相等,那么您将遇到没有下一个节点名称且节点Value
为
Natural'Value (Input (First_Semicolon + 1 .. Input'Last))
但如果它们不相等,则存在下一个节点名称,因此节点Value
来自分号之间的Input
部分,
Natural'Value (Input (First_Semicolon + 1 .. Last_Semicolon - 1))
以及Next_Node_Name
的剩余部分中的Input
,
Input (Last_Semicolon + 1 .. Input’Last)
显然这里没有错误检查,并且有很多可能出错的地方。我也没有讨论创建链表,因为你说你可以这样做(我个人使用Ada.Containers.Doubly_Linked_Lists
...)