Строка - это просто массив символов. Главной особенностью переменных типа String является то, что при создании строковой переменной необходимо указать Ada-компилятору способ определения ее длины; с этого момента для переменной будет установлена определенная длина. Существует два основных способа определения длины строки: можно точно указать, какую длину будет иметь строка или присвоить переменной строковое значение (Ada определит длину этого значения и установит ее для новой переменной).
Ada требует указания, по меньшей мере, границ, либо инициализирующего строкового значения; если указано и то и другое, то между ними должно быть соответствие. "Нижняя_граница" обычно устанавливается равной 1, хотя в Ada разрешается чтобы "Нижняя_граница" была величиной типа Integer, большей, чем единица. Ниже приведены несколько примеров:
A : String(1..50); -- Переменная A содержит 50 символов. Question : String := "What is your name?" -- Ada создаст String(1..18).
Ниже приведен упрощенная BNF для описания строковых переменных:
описание_строковой_переменной ::= список_имен_переменных ":" [ "Constant" ]
"String" [ границы ]
[ ":=" инициализирующая_строковая_величина ]
границы ::= "(" нижняя_граница ".." верхняя_граница ")"
Как только строка описана, можно использовать предопределенные в Ada
операции для массивов (так как строка - это просто массив символов).
Используя эти операции:
A(2) := 'f';
B := A;
Существуют также предопределенные операции для печати строк в пакете Text_IO , а именно Put и Put_Line. Рассмотрим пример:
with Text_IO; use Text_IO;
procedure String1 is
A : String := "Hello";
B : String(1..5);
begin
B := A; -- B принимает значение "Hello"
A(1) := 'h'; -- A принимает значение "hello"
A(2..3) := A(4..5); -- A принимает значение "hlolo"
A := B(1) & A(2..3) & "ol"; -- A принимает значение "Hlool"
Put_Line(A);
A(2..3) := B(2..3);
Put_Line(A);
end String1;
Какую последнюю строку выведет на экран программа String1?
|
|
|
|
|---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s8s3.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк