解析分隔的字符串

时间:2014-10-24 17:27:00

标签: ada

我需要在ADA中实现一个链接列表,其中包含3个部分的节点,其中包括: 1.节点的名称 2.节点的值 3.下一个节点的名称

我需要从用户那里获取输入,节点的每个部分都以“;”

结尾

e.g

这是命令行上的输入必须是

一个; 22,B B; 33; C ^ ℃; 43

LL结束于c。所以我们在值

之后什么都没有

我可以实现一个LL,但我怎么读这个';'在输入中并动态地将其分配给相应的节点以构建链表???

1 个答案:

答案 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_SemicolonLast_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 ...)