Песни о Паскале | страница 61



Оказывается, что по этим номерам можно обращаться к отдельным символам строки, применяя операцию индексации. Она записывается с помощью пары квадратных скобок, расположенных за символьной переменной или константой. Внутрь скобок помещают числовое выражение, указывающее позицию символа в строке. Например, для извлечения 3-го символа строки можно написать


>      c1:= S[3];


Выражение, что внутри квадратных скобок, называется индексом. Повторяю, индексом может быть не только число, но и числовое выражение, например:


>      c1:= S[2*N+1];


Если N равно двум, то в символьную переменную c1 будет помещен пятый символ строки S.

Длина строки

Разумеется, что значение индекса не должно превышать количество символов в строке. Но как избежать таких ошибок? Если строка перед глазами, вы посчитаете символы, тыча в строку пальчиком. А если это строковая переменная?

В Паскале есть функция, определяющая количество символов в строке, или, иначе говоря, длину строки. Эта функция так и называется – Length – «длина». Вызвать её можно, например, так:


>      K:= Length(S);


Здесь переменной K целого типа присваивается значение длины строковой переменной S. Вот ещё примеры (в комментариях указаны результаты).


>      S:= ’’; K:= Length(S);       { К=0 }

>      S:= ’PAS’ K:= Length(S);       { К=3 }

>      K:= Length(S+’CAL’);       { К=6 }

>      K:= Length(’Привет, Мартышка!’);       { К=17 }


Распечатка строки

Теперь мы достаточно подкованы, чтобы решить поставленную задачу – разбить строку на отдельные символы. Вот как выглядит один из вариантов решения.


>{ P_18_1 – распечатка отдельных символов строки }

>var S: string;

>      C: char;

>      k, L : integer;

>begin

>      repeat

>      Write(’Введите строку: ’); Readln(S);

>      L:= Length(S); { определяем длину строки }

>      for k:=1 to L do begin

>      C:= S[k]; { выбираем очередной символ }

>      Writeln(C); { и печатаем его в отдельной строке }

>      end;

>      until L=0;       { L=0, если строка пуста }

>end.


После ввода запрошенной строки определяем её длину, а затем, пробегая по строке, выбираем и печатаем символы. Программа работает, пока пользователь не введет пустую строку; тогда длина строки L станет равной нулю, и цикл завершится.

В этом варианте программы я сознательно допустил некоторые излишества, дабы наглядней показать механизм доступа к символам строки. То же самое можно записать короче, а именно:


>{ P_18_2 – распечатка отдельных символов строки, краткий вариант }