Ada 解析分隔字符串

Ada 解析分隔字符串,ada,Ada,我需要在ADA中实现一个链表,它有一个由3部分组成的节点,包括: 1.节点的名称 2.节点的值 3.下一个节点的名称 我需要从用户那里获取输入,节点的每个部分都以 e、 g 这就是命令行上的输入必须是什么样子 a;22;B B33;C C43 LL在c结束。因此,我们在值之后没有任何内容 我可以实现一个LL,但是我应该如何读取“;”在输入中,并将其动态分配给相应的节点,以构建链表???假设您有一个包含节点数据之一的字符串输入,例如,“a;22;b“,您可以使用 First_Semicolon :

我需要在ADA中实现一个链表,它有一个由3部分组成的节点,包括: 1.节点的名称 2.节点的值 3.下一个节点的名称

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

e、 g

这就是命令行上的输入必须是什么样子

a;22;B B33;C C43

LL在c结束。因此,我们在值之后没有任何内容


我可以实现一个LL,但是我应该如何读取“;”在输入中,并将其动态分配给相应的节点,以构建链表???

假设您有一个包含节点数据之一的字符串输入,例如,“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);
最后一个分号使用

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);
然后,节点名是输入的子字符串,从开始到第一个分号之前的一个

Input (Input'First .. First_Semicolon - 1)
如果第一个分号和最后一个分号相等,则表示没有下一个节点名称,节点值为

但如果它们不相等,则会出现下一个节点名,因此节点值来自分号之间的输入部分

Natural'Value (Input (First_Semicolon + 1 .. Last_Semicolon - 1))
以及输入剩余部分中的下一个节点名称


显然这里没有错误检查,而且有很多可能出错。我也没有讨论过创建链表,因为你说你可以亲自创建,我会使用Ada.Containers.Doubly_linked_list…

如果命令行输入是;22;xb;33;CC43? 如果数据是b,会发生什么;33;c c;43 a;22;B我一点也不确定链表是否是正确的方法。假设用户将按顺序指定节点…并在键入下一个链接节点的名称后按enter键。我只需要把它作为一个链表来实现。我不确定你的问题是什么。。。您是否一直在试图找出如何在Ada中解析输入字符串?其中有很多过程和函数应该是有用的,切片表示法是如何提取子字符串的。看起来你还没有尝试过任何东西,但这不可能是真的吗?你能告诉我们你已经走了多远吗?这是你的家庭作业吗?如果是,记得引用你的消息来源。