Раздел 8.3 - Основы сведения о типе String

Тип String в языке Ada можно считать "простейшим" типом для работы с последовавтельностями текстовых символов. Он прост и эффективен, но все же некоторые операции требуют небольших усилий.

Строка - это просто массив символов. Главной особенностью переменных типа 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 операции для массивов (так как строка - это просто массив символов). Используя эти операции:
  1. Можно прочесть или перезаписать символ (элемент строки) в заданной индексом позиции. Например, A(2) указывает на символ в строке A с индексом 2. Любые попытки чтения или записи с использованием несуществующего значения индекса вызовут исключительную ситуацию Constraint_Error. Изменения символа в заданной позиции осуществляется простым присваиванием, например:
        A(2) := 'f';
    
  2. Можно прочесть или перезаписать отрезок строки (т.е. подстроку). Отрезок представляет собой участок строки от одной индексной позиции до другой, и также считается строкой. Подстрока, начинающаяся с индексной позиции "нижняя" и заканчивающаяся позицией "верхняя" некоторой строковой переменной B, записывется как "B(нижняя..верхняя)". Также возможна перезапись подстроки, при условии что приемник и источник имеют одинаковую длину.
  3. Если длины строк совпадают, то можно выполнять присваивание значения одной строки другой, точно также, как это делается для любых других переменных, например:
        B := A;
    
  4. Можно объединять (комбинировать) строки используя знак операции "&".

Существуют также предопределенные операции для печати строк в пакете 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?

  1. Hello
  2. Hlolo
  3. hello
  4. Helol

Вы можете также:

PREVIOUS Перейти к предыдущему разделу

NEXT     Перейти к следующему разделу

OUTLINE  Вернуться к содержанию Урока 8

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s8s3.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org