Строка - это просто массив символов. Главной особенностью переменных типа 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?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 8 |
---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s8s3.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк