Ada 中的字符串数组

Rom*_*wal 4 arrays string ada dynamic-allocation

我在 Ada95 中有一个程序,我必须在其中创建一个字符串数组。该数组可以包含可变长度的字符串。

示例:我已经声明了一个数组,其中所有索引都可以存储大小为 50 的字符串。当我为上述数组分配一个较小的字符串时,我得到“约束错误”。

代码:

procedure anyname is
    input_array : array(1..5) of String(1..50);
begin
    input_array(1):="12345";
end anyname;
Run Code Online (Sandbox Code Playgroud)

我试图创建 Unbounded_Strings 数组。但这也行不通。谁能告诉我如何在上面的字符串数组中存储这个“12345”?

ajb*_*ajb 7

如果使用Unbounded_String,则不能直接为其分配字符串文字。字符串文字可以有 type String, Wide_String, or Wide_Wide_String,但没有其他类型;Ada 中的赋值通常要求目标和源的类型相同。要将 a 转换String为 an Unbounded_String,您需要调用该To_Unbounded_String函数:

procedure anyname is
    input_array : array(1..5) of Ada.Strings.Unbounded.Unbounded_String;
begin
    input_array(1) := Ada.Strings.Unbounded.To_Unbounded_String ("12345");
end anyname;
Run Code Online (Sandbox Code Playgroud)

您可以使用use子句缩短名称;其他一些程序员可能会定义自己的重命名函数,甚至可能使用一元运算"+"符:

function "+" (Source : String) return Ada.Strings.Unbounded.Unbounded_String
    renames Ada.Strings.Unbounded.To_Unbounded_String;

procedure anyname is
    input_array : array(1..5) of Ada.Strings.Unbounded.Unbounded_String;
begin
    input_array(1) := +"12345";  -- uses renaming "+" operator
end anyname;
Run Code Online (Sandbox Code Playgroud)

不是每个人都喜欢这种风格。