Песни о Паскале | страница 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 – распечатка отдельных символов строки, краткий вариант }