arrays - Ada 中的字符串数组

标签 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;

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

最佳答案

如果您使用Unbounded_String,则无法直接为其分配字符串文字。字符串文字可以具有 StringWide_StringWide_Wide_String 类型,但不能有其他类型; Ada 中的赋值通常要求目标和源是同一类型。要将 String 转换为 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;

您可以使用 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;

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

关于arrays - Ada 中的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684909/

相关文章:

c++ - 数组中的最大 X 值

javascript - 如何将 JS 键控对象转换为键控数组,同时跳过未定义?

c - 将字符串数组传递给要更改的函数

c# - 在不总是相同的字符串中间添加一个字符

algorithm - 存储错误-第一次深度搜索算法

memory-management - 一般而言,有没有关于子池和池的好的教程/解释?

arrays - 数组包含太慢的 Swift

mysql left join 空varchar两边(MyISAM)

string - 是否可以在 Excel 单元格中执行多个彩色文本?

ada - 子程序声明部分评估顺序 Ada