Паскаль позволяет обрабатывать не только числовые, но и символьные данные, которые бывают двух типов. Символы описываются в описательной части программы атрибутом CHAR и хранят один знак. Строки это цепочки символов и описываются атрибутом STRING. Например, var ST: char; SM: string[32]; SS: string. Здесь ST – одиночный символ, SM – строка не более чем из 32 символов. Если количество символов не указано, строке присваивается емкость в 255 символа. В программе и символы и строки должны заключаться в апострофы, например: ST:=‘a’; SM:=‘экзамен’;. Над символами и строками с помощью приведенных в таблице функций производятся различные операции.
Функция
Назначение
concat (строка1,строка2)
Соединяет строки строка1 и строка2 в одну (пример: concat(‘а’,’б’)=’аб’)
copy(строка, позиция,
количество)
Копирует из строки, начиная с заданной позиции количество символов
(пример: copy(‘программа’,4,5)=’грамм’)
delete(строка,
количество,позиция)
Удаляет из строки количество символов, начиная с заданной позиции
(пример: delete(‘программа’,4,4)=’прома’)
insert(строка1,строка2,
позиция)
Вставляет строку1в строку2, начиная с заданной позиции
(пример: insert(‘сколько стоит’,’это ’,9)= ‘сколько это стоит’)
length(строка)
Определяет длину строки (пример: length(‘саша’)=4)
pos(строка1,строка2)
Отыскивает в строке2 первое вхождение строки1 и определяет номер
позиции, с которой она начинается (пример: pos(‘саша’,’а’)=2)
upcase(символ)
Преобразует символ латинского алфавита в заглавный
str(число,
формат,строка)
Преобразует число типа integer или real в строку по заданному (если есть) формату
(примеры: str(5,x) – результат х=’5’, str(18.3:5:2,y) – результатy=’18.30’)
val(строка,
число,признак)
Преобразует строку в целое или вещественное число, если оно прошло успешно, признак =0
(пример: val(’12.4’,x,k) – получим x=12.4, k=0)
ord(символ)
Преобразует символ в целое число – код символа в ASCII-таблице (пример: ord(Я)=159)
chr(число)
Преобразует число в символ из ASCII-таблицы с соответствующим кодом (пример: chr(159)=’Я’)
Над символьными данными определена операция ‘+’ (аналогичная concat) сцепления. Пример: ‘студент ’+’Петров’= ’студент Петров’.
Задача 7-1.В символьной строке Х=‘Петров Саша’ поменять местами имя и фамилию и поместить результат в Y. Решение потребует трех действий: 1). Нахождение позиции пробела n=7, 2). Остаток фразы от пробела (т.е. ‘Саша’) поместить в Y. 3).Дополнить Y пробелом и начальным фрагментом фразы Х до пробела. Для наглядности процесс реализован в трех операторах. Но можно записать его и в один y:=copy(x,pos(' ',x)+1,length(x))+' '+copy(x,1,pos(' ',x)-1);
коды
символы
0..32
управляющие
65..90
A..Z
97..122
a..z
128..159
А..Я (кроме Ё)
160..175
а..п (кроме ё)
224..239
р..я
240,241
Ё,ё
Задача 7-2.В символьной строке Х подсчитать количество K слов. Считаем, что число слов равно числу пробелов +1. Первый вариант программы P7_2 имеет недостаток. Если перед первым словом предложения или после последнего имеются пробелы, или внутри фразы встречается более одного пробела разом, число найденных слов окажется больше фактического. Исправим программу с учетом этих обстоятельств. Во втором варианте добавлен просмотр начала фразы до первого не пробела (j – номер первого значащего символа). Затем просматривается остаток фразы, где подсчитываются только одиночные пробелы (после пробела в i-ой позиции не должен стоять другой пробел). Дополните программу выдачей по отдельности всех слов предложения и их (справа) длин.
Представление символьных данных. Каждому символу ПК сопоставлен код (целое число от 0 до 255) из ASCII-таблицы. Первые 128 символов включают цифры, знаки, латинские символы. Из них символы с кодами 0..31 являются служебными (возврат каретки, перевод строки и т.д.). Латинские буквы A..Z имеют коды 65..90, a..z – 97..122. Следующие 128 позиций заняты символами псевдографики и буквами национального алфавита. В кириллице буквы A..Я имеют коды 128..159, a..п – 160..175, р..я – 224..239, буквы Ё – 240, ё – 241. Замечаем, что коды заглавных и строчных букв a..п различаются на 32, а букв р..я – на 80. Очевидно, что на клавиатуре нет всех 256 знаков. Тем не менее, они могут быть отражены в программе с помощью своего кода в форме: #код. Например, оператор write(#65,#177,#201,#205,#187); выведет строку: “A▒╔═╗”. Символы, отсутствующие на клавиатуре, можно найти в справочнике, а можно и вывести вместе с их кодами на экран с помощью операторов: for i:=0 to 255 do write(chr(i),i:3,' ');. Отметим, что коды от 0 до 31 являются управляющими и, хотя многие из них имеют экранное отображение, использовать эти символы для непосредственного вывода нельзя.
Символьные данные можно сравнивать между собой. При этом более короткая строка дополняется символами с кодом 0 до размеров более длинной строки. Далее последовательно слева направо коды символов сравниваются попарно из обеих строк (чей код больше – тот символ больше). Например: ‘а’<’б’; ‘а’=’а’; ’а’>’А’ (заглавные буквы имеют меньший код); ‘ВАЛЯ’<’ВАСЯ’ (расхождение в третьем символе, где ‘Л’<’C’); ‘ЯША’>’ПETP’ (буква Я больше П).
Задача 7-3.В строке S содержатся русские и латинские символы (заглавные и строчные), цифры и знаки препинания. Преобразовать все символы S в заглавные. Результат занести в D. В программе Х – строка размером в один символ, куда заносятся поочередно все символы из S для преобразования. В результате получим D='абвxyz123ABC'. Преобразование здесь осуществляет оператор вида X:=chr(ord(x[1])-32). Здесь сначала выясняется код ord(x[1])текущего символа, из него вычитается 32 (т.е. вычисляется код соответствующей заглавной буквы), и, наконец, этот код снова преобразуется в символ.