在Ada中,我们可以给出一个字符串少于最初指定的字符吗? 例如:
Text : String(1..5);
Text := "ada";
这段代码是否正确?或者我们是否有义务给出一个5个字符的字符串?
谢谢。
答案 0 :(得分:7)
使用类型String
,您必须 - 与Ada中的其他数组类型一样 - 填充数组中的所有位置。
但是有很多技巧:
String
(数组),并且您不必明确声明范围:declare
Text : constant String := "Ada";
begin
...
end;
String
(数组)的哪个切片:declare
subtype Five_Characters is String (1 .. 5);
Text : Five_Characters := (others => ' ');
begin
Text (2 .. 4) := "Ada";
...
end;
使用Ada.Strings.Unbounded
:
declare
use Ada.Strings.Unbounded;
Text : Unbounded_String;
begin
Text := To_Unbounded_String ("Ada");
...
end;
答案 1 :(得分:1)
代码不正确,您必须指定5个字符,例如
declare
Text : String(1..5);
begin
Text := "ada ";
end;
或指定范围
declare
Text : String(1..5) := (others => ' '); -- Init to spaces
begin
Text(1..3) := "ada"; -- Text now contains "ada "
end;
或使用其中一个可用的字符串处理包。
答案 2 :(得分:0)
是的,Ada可以做到。
您可以将较小长度的字符串分配给给定长度的固定字符串。 在“ Ada.Strings.Fixed”包下定义了一个“移动”过程。
借助此移动过程,您可以将较小的字符串分配给给定的固定字符串,用空格填充其余索引,并对齐复制的字符串Left,Center或Right。
with Ada.Text_IO; use ADA.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Command_Line;
with Ada.Strings;
with Ada.Strings.Fixed;
with Ada.Strings.Bounded;
with Ada.Strings.Unbounded;
procedure fixed_string_ops is
str_1 : String(1 .. 5);
begin
Ada.Strings.Fixed.Move (Source => "Ada", Target => str_1, Drop => Ada.Strings.Right, Justify => Ada.Strings.Right, Pad => Ada.Strings.Space);
Put_Line(str_1);
Ada.Strings.Fixed.Move (Source => "Ada", Target => str_1, Drop => Ada.Strings.Right, Justify => Ada.Strings.Center, Pad => Ada.Strings.Space);
Put_Line(str_1);
Ada.Strings.Fixed.Move (Source => "Ada", Target => str_1, Drop => Ada.Strings.Right, Justify => Ada.Strings.Left,Pad => Ada.Strings.Space);
Put_Line(str_1);
end fixed_string_ops;
使用以下代码编译以上代码
> gnatmake fixed_string_ops.adb
然后运行
> fixed_string_ops.exe
Ada
Ada
Ada
您可以看到填充和对齐方式。