Символы и строки (PascalABC.NET)

Материал из Информационная безопасностя
Перейти к навигации Перейти к поиску

Pascal ABC.NET выбор школьника - Часть 3

Символы (char)

Данные символьного типа имеют тип char и занимают в памяти два байта. Используется кодировка стандарта Unicode. В тексте программы символьная константа (так называемый литерал) всегда заключается в одинарные кавычки.

 1 var c1, p135, rz: char; // три переменные
 2 var Символ1: char; // одна переменная
 3 var s: sequence of char; // последовательность символов;
 4 var ca: array[1..35] of char; // статический массив символов
 5 var ar: array of char; // динамический массив символов
 6 var m: array[,] of char; // матрица символов
 7 
 8 var a: char := 'a'; // тип указан явно
 9 var b:= 'b'; // автовыведение типа
10 var kt:= ('A', 'B', 'C'); // кортеж из трех символов

Перевод символа в его код и обратно

Символ в код

  • Ord(c) – код символа c в Unicode (тип word длиной 2 байта);
  • char.Code – то же, точечная нотация;

Код в символ

  • Chr(код) – символ с указанным кодом Unicode;
  • #код – символ с указанным кодом Unicode; принимает только

литерал;

Принадлежность символа к группе

Является ли символ буквой?

c.IsLetter

Расширение c.IsLetter возвращает True, если символ c принадлежит к группе букв и False в противном случае.

Является ли символ цифрой?

c.IsDigit

Расширение c.IsDigit возвращает True, если символ c принадлежит к группе цифр и False в противном случае.

Является ли символ пробельным?

Пробельные символы – термин, пришедший из типографской практики. Пробел – это пустое место, интервал между символами. Пробельными в типографском и издательском деле называют непечатаемые (и неотображаемые) символы. Символы с десятичными кодами 9..13 относятся к так называемым управляющим символам – раньше они управляли внешними устройствами, такими как механический принтер. Символ с кодом 32 – это пробел.
char.IsWhiteSpace(c)

Статический метод char.IsWhiteSpace(c) возвращает True, если символ c принадлежит к группе пробельных символов и False в противном случае.

Является ли символ знаком препинания?

char.IsPunctuation(c)

Статический метод char.IsPunctuation(c) возвращает True, если символ c принадлежит к группе знаков пунктуации (разделителям) и False в противном случае.

Принадлежит ли буква к верхнему регистру?

c.IsUpper

Расширение c.IsUpper возвращает True, если символ c принадлежит к буквенным символам верхнего регистра (прописным) и False в противном случае. Если символ не является буквой, всегда возвращается False.

Принадлежит ли буква к нижнему регистру?

c.IsLower

Расширение c.IsLower возвращает True, если символ c принадлежит к буквенным символам нижнего регистра (строчным) и False в противном случае. Если символ не является буквой, всегда возвращается False.

Принадлежит ли символ интервалу?

c in c1..c2

Конструкция c in c1..c2 вернет True, если символ c принадлежит группе символов от с1 до с2 включительно и False в противном случае.

Операции преобразования символов

Смена регистра буквенного символа

  • c.ToUpper – расширение возвращает буквенный символ c, приведенный к верхнему регистру, если он принадлежит к нижнему регистру. В противном случае символ возвращается без изменения;
  • UpCase(c) – функция, делающая то же самое;
  • c.ToLower – расширение возвращает буквенный символ c, приведенный к нижнему регистру, если он принадлежит к верхнему регистру. В противном случае символ возвращается без изменения;
  • LowCase(c) – функция, делающая то же самое

Преобразование цифрового символа в число

c.ToDigit

Расширение c.ToDigit возвращает буквенный символ c, преобразованный к изображаемому им целому неотрицательному однозначному числу типа integer. Если символ не является цифрой при выполнении программы будет выдано сообщение «Ошибка времени выполнения: not a Digit» и программа завершится аварийно.

Получение символа, соседнего с указанным

  • c.Pred – расширение возвращает буквенный символ, код которого в кодовой таблице предшествует коду символа c;
  • Pred(c) – функция, делающая то же самое;
  • c.Succ – расширение возвращает буквенный символ, код которого следует за кодом символа c;
  • Succ(c) – функция, делающая то же самое.

Смещение по символам кодовой таблицы

  • Dec(c) – процедура, заменяющая значение переменной, содержащей символ c на символ, предшествующий ему. Ведь это обычная

операция декремента, только для символа;

  • Dec(c, n) – процедура, заменяющая значение переменной c, содержащей символ c на символ, находящийся в кодовой таблице на n

позиций раньше. Тоже декремент;

  • Inc(c) – процедура, заменяющая значение переменной, содержащей символ c на символ, следующий за ним. Это инкремент.
  • Inc(c, n) – процедура, заменяющая значение переменной, содержащей символ c на символ, находящийся в кодовой таблице на n

позиций дальше. И это инкремент.

Ввод символов

Функции, осуществляющие ввод символьных данных с приглашением:

1 var c1 := ReadlnChar('ТекстПриглашения'); // ввод одного символа
2 var c2 := ReadlnChar2('ТекстПриглашения'); // ввод двух символов
3 var c3 := ReadlnChar3('ТекстПриглашения'); // ввод трех символов
4 var c4 := ReadlnChar4('ТекстПриглашения'); // ввод четырех символов

Вывод символов

С выводом все просто: используются уже знакомые процедуры Write, Writeln, Print, Println, а также расширения .Print и .Println. Имеется лишь oдна особенность вывода символов при помощи расширений: разделителем по умолчанию является не пробел, а пустой символ.

Строки

В PascalABC.NET строка – это последовательность символов практически неограниченной длины (на самом деле, строка не может занимать в памяти больше 2.1 Гбайт), принадлежащая некоторому алфавиту.

Символы в строке нумеруются от единицы (Эта особенность унаследована от языка Turbo Pascal) и чтобы обратиться к символу с номером k в строке s нужно написать s[k].

Чтобы символы строк нумеровались с 0 как и элементы динамических массивов необходимо в начале файла написать директиву компилятора.

{$ZeroBasedStrings}

Имеются два типа строк. Первый тип – строки длиной не превышающей 255 символов, унаследованные от языка Turbo Pascal. Они именуются короткими строками». При описании короткой строки после ключевого слова string в квадратных скобках указывается ее максимальная длина. Короткие строки оставлены в языке лишь для совместимости со старыми программами. Второй, основной тип строк – современные строки; при их описании длина не указывается. Мы будем рассматривать именно такие строки.

1 var st, s1, p18: string; // три строки
2 var s1: string; // одна строка
3 var sos: sequence of string; // последовательность строк
4 var ar: array of string; // динамический массив строк
5 var sh1: string[27]; // короткая строка, максимум 27 символов
6 // Описание строк можно соединять с инициализацией:
7 var s1: string := 'Это строка'; // тип указан явно
8 var s2 := '*** И это строка ***'; // автовыведение типа
9 var kt := ('Это', 'тоже', 'строка'); // кортеж из трех строк

Строка может состоять из одного символа, и даже может иметь и нулевую длину, т.е. не содержать ни одного символа. В последнем случае она записывается парой одиночных кавычек, следующих друг за другом.

Длина строки

Текущую длину строки, т.е. количество символов в ней, можно определить следующим образом:

  • s.Length – свойство, возвращает длину строки s
  • Length(s) – функция, делающая то же самое

Нумерация символов в строке от 0 или от 1

Если вы не используете директиву компилятора для нумерации символов строк с 0, то важно иметь ввиду это различие.

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

Запомнить это проще всего визуально. Если в коде программы строка s используется в записи вида string.Метод(s) или s.Метод, она считается индексированной от нуля. Если «точки» нет, то строка считается индексированной от единицы.