11 Строковый тип.ppt
- Количество слайдов: 16
Символьный тип данных Строковый тип данных Перечисляемый тип Тип множество
IBM-совместимые компьютеры обрабатывают 256 различных символов, каждый из которых кодируется одним байтом. Соответствие символов и байтов задается таблицей кодировки, в которой для каждого символа указывается соответствующий байт. Символы с кодами от 0 до 127 построены по стандарту ASCII (American Standard Code for Information Interchange — Американский стандартный код обмена информацией, читается "аски"). Вторая половина таблицы (коды 128. . . 255) в нашей стране содержит русские буквы (кириллицу) и символы псевдографики.
Кодовая таблица ASCII . 0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . A . B . C . D . E . F EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI DC 1 DC 2 DC 3 DC 4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 0. NUL SOH STX 1. DLE 2. ! " # $ % & ' ( ) * + , — . / 3. 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 4. @ A B C D E F G H I J K L M N O 5. P Q R S T U V W X Y Z [ ] ^ _ 6. ` a b c d e f g h i j k l m n o 7. p q r s t u v w x y z { | } ~ DEL ETX
Для того, чтобы определить по этим таблицам код того или иного символа, нужно сложить номер строки с номером столбца, в которых он расположен. Так, код цифры 5 равен 05+048 = 053.
Кодировка 1 байт на символ 0 127 1 таблица ASCII (международная) 128 254 255 кодовая страница ASCII = American Standard Code for Information Interchange 0 -31 управляющие символы: 7 – звонок, 10 – новая строка, 13 – возврат каретки, 27 – Esc. 32 – пробел знаки препинания: . , : ; ! ? специальные знаки: + - * / () {} [] 48 -57 цифры 0. . 9 65 -90 заглавные латинские буквы A-Z 97 -122 строчные латинские буквы a-z Кодовая страница (расширенная таблица ASCII) для русского языка: CP-866 для системы MS DOS CP-1251 для системы Windows (Интернет) КОИ 8 -R для системы UNIX (Интернет) 5
Тип данных CHAR (символ) – определяет полный набор символов таблицы ASCII. Функция Ord дает ASCII-код соответствующего символа, например, Ord(’A’) = 65, Ord(’a’) = 97. Сравниваются величины символьного типа по своим кодам. Тип данных STRING (строка) – строковый тип – в Паскале используется для обработки текстов. Строковая константа – последовательность символов, заключенных в апострофы, например, ‘Сумма равна’. Строковая переменная объявляется в разделе описания: Var <идентификатор>: string [<максимальная длина строки>]; Например: Var S: string [12];
Длину строки можно не указывать. В этом случае длина строки максимальна – 255. Длина строки может меняться в ходе выполнения программы. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива: S[i]. Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый символ строки занимает второй байт и имеет индекс 1. Типы STRING и CHAR совместимы, они могут употребляться в одних и тех же выражениях, т. е. например, переменной типа STRING можно присвоить значение переменной типа CHAR.
Операции над строками Операции отношения: =, <. >, <=, >=, <>. Сравнение строк производится слева направо до первого несовпадающего символа. Если длины строк разные, но в общей части символы совпадают, то считается, что больше более длинная строка. Операция сцепления (+) применяется для соединения нескольких строк в одну строку. Сцеплять можно как константы, так и переменные. Сцепление можно выполнять и с помощью функции Concat(S 1, S 2, …, S 1). Функция Copy(S, M, N) выделяет из строки S подстроку длиной N символов, начиная с позиции M. Функция Length(S) определяет текущую длину строки S. Функция Pos(S 1, S 2) обнаруживает первое появление в строке S 2 подстроки S 1. Результат – номер позиции, с которой она начинается. Если подстрока не найдена, возвращается 0.
Процедура Delete(S, M, N ) – удаление N символов из строки S, начиная с символа с позиции M. Процедура Insert(S 1, S 2, N) – вставка строки S 1 в строку S 2, начиная с символа с позиции N. Процедура Str(X[: m[: n]], S) – преобразует целое или вещественное выражение Х в строку S. m, n – форматы вывода целого типа, аналогично процедуре Write. Процедура Val(S, X, Code) – преобразует строку S во внутреннее представление целой или вещественной переменной Х, параметр Code получает значение 0, если преобразование прошло успешно, и тогда в Х помещается результат преобразования, в противном случае Code содержит номер позиции, где обнаружен ошибочный символ, и в этом случае Х не меняется. Например, в результате обращения Val(’ 123’, k, c) k получит значение 123, а обращение Val(’ 123 ’, k, c) ошибочно.
Функция Up. Case(С) – типа CHAR, преобразует строчную латинскую букву в заглавную. С – выражение типа CHAR, которое находится в пределах a-z, в противном случае функция не выполняет никаких действий. Функция Chr( X : Byte ): Char Возвращает символ с заданным порядковым номером X.
Задача: Дана строка, заканчивающаяся точкой. Подсчитать, сколько в ней слов. Слова в тексте разделены одним пробелом. begin read(S); k: =0; L: = length(S); for i: =1 to L do if S[i]=’ ’ then k: =k+1; write(’кол-во слов: ’, k+1); end. Если слова в тексте разделены произвольным кол-вом пробелов, их cначала нужно удалить, оставив по 1 пробелу. Это можно сделать так: … n: = Pos(’ ’, S); whiele n<>0 do begin Delete(S, n, 1); n: = Pos(’ ’, S); end; if S[1]=’ ’ then Delete(S, 1, 1); L: = length(S); if S[L]=’ ’ then Delete(S, L, 1); … Далее выполняется предыдущий алгоритм.
Задача (самостоятельно): в заданной строке заменить все вхождения ‘ФОМ’ на ‘МФ’.
Перечисляемый тип Не является стандартным и определяется набором идентификаторов, с которыми могут совпадать значения параметра. Список идентификаторов указывается в круглых скобках через запятую: <имя типа>: = (<идентификатор 1, идентификатор 2, … , идентификатор N>; ) Пример: Type Operat = (Plus, Minus, Mult, Divide); Логический тип является частным случаем перечислимого: Type Boolean = (True, False);
Тип множество Множества – наборы однотипных логически связанных друг с другом объектов. Связи лишь подразумеваются программистом и никак не контролируются Паскалем. Количество элементов – 0 -256. Для описания следует использовать служебные слова set и of, а затем указать элементы этого множества, как правило, в виде перечисления или диапазона, например: var M: set of string[2]; V: set of ’o’. . ’ 9’; D: set of CHAR: Begin M: =[’жи’, ’ши’, ’ча’, ’ща’] {присваивание с помощью конструктора множеств}
Для множеств определены следующие операции: + – объединение – – разность * – пересечение <> – проверка неэквивалентности двух множеств <= – проверка, является ли левое множество подмножеством правого >= – в обратном порядке in – проверка, входит ли элемент, указанный слева, во множество, указанное справа. Результат операций +, –, * – множество, у остальных операций логический результат. Множества используются редко из-за низкой скорости выполнения операций над ними.
Задача: Подсчитать количество знаков препинания в предложении. Program Kol_zn; Var S: string; K, l, i: integer; M: set of CHAR; Begin M: =[’. ’, ’, ’, ’: ’, ’; ’, ’!’, ’? ’] read(S); k: =0; L: = length(S); for i: =1 to L do if S[i] in M then k: =k+1; write(‘кол-во знаков препинания: ’, k); readln; end. Как выглядит программа без использования множеств?