Часть полного текста документа:Тип STRING Тип STRING - это строковый тип в Паскале. Строкой называется последовательность символов. Строковыми константами вы уже неоднократно пользовались - это последовательность любых символов, заключенная в апострофы; допускаются и пустые строки, они записываются так: ''. Строковые переменные и типизированные константы описываются в виде STRING или STRING [ максимальная длина ] Если максимальная длина не задана, то по умолчанию она берется равной 255. Максимальная длина при описании строковых данных задается целочисленным константным выражением и никогда не может превышать 255. Это ограничение обусловлено самой структурой типа STRING : фактически строка - это массив ARRAY [ Byte ] OF Char, причем в 0-м символе закодирована текущая длина строки. Строковые переменные могут иметь любую длину от 0 до максимальной. В программе строки можно использовать и как единый структурированный объект (чуть позже мы познакомимся с разнообразными возможностями обработки строк), и как массив символов, т.е. обращаться к элементам строк следует так же, как к элементам массивов. Для строк определены следующие операции : - строке можно присвоить строку; - строки можно вводить процедурой READLN; - строки можно выводить процедурой WRITE[LN]; - для строк определена операция сцепления +, при этом вторая строка дописывается справа к первой и длина результата становится равной сумме длин операндов (если она не превосходит 255). Запишем программу, выполняющую простейшие операции со строками: TYPE ShortString = STRING[80]; VAR s1,s2 : ShortString; s3 : STRING; BEGIN WRITE('Введите 1-ю строку '); READLN(s1); WRITE('Введите 2-ю строку '); READLN(s2); WRITELN('Вы ввели ',s1,' и ',s2); WRITELN('s1+s2=',s1+s2); s3:=s1+s1+s1; WRITELN('s1,повторенная 3 раза ',s3); END. Обратите внимание, что при вводе строк всегда используется READLN, но не READ. Процедура READ в отличие от READLN считывает лишь символы до символа конца строки (клавиша Enter), который остается в буфере клавиатуры. Таким образом, пользуясь процедурой READ можно ввести только одну строку; все строки, вводимые вслед за первой, станут пустыми. Например, программа VAR s1,s2 : STRING; BEGIN WRITE('Введите 1-ю строку '); READ(s1); WRITE('Введите 2-ю строку '); READ(s2); WRITELN('Вы ввели "',s1,'" и "',s2,'"'); END. при входном потоке abcdef Enter 123456 Enter выведет : Вы ввели "abcdef" и "". Запишем теперь программу, которая вводит некоторую строку, заменяет в ней все цифры на пробелы и дописывает в конец строки символы "???": VAR s : STRING; L,i : Byte; BEGIN WRITE('Введите строку '); READLN(s); L:=ORD(s[0]); FOR i:=1 TO L DO IF s[i] IN ['0'..'9'] THEN s[i]:=' '; FOR i:=L+1 TO L+3 DO s[i]:='?'; WRITELN('Вот что получилось : ',s); END. Наша программа заменила цифры, но никаких "?" не добавила. Дело в том, что, обращаясь к элементам строки, невозможно изменить текущую длину строки. Второй цикл нашей программы сработал правильно, записав символы "?" в соответствующие элементы строки, но длина строки осталась прежней, и процедура WRITELN вывела только символы с 1-го по L-й. Чтобы решить задачу корректно, мы могли бы добавить в программу один оператор INC(s[0],3); но, конечно, лучше всего просто записать: s:=s+'???'; . Для обработки строк в Паскале существует несколько стандартных функций и процедур : 1. ............ |