IPB

> Лекция №5.2: Символы и строки. Множества
Чат
Форум
Загрузка...
 

страницы: 1 2 3 4 5

Содержание

Действия с символами

Стандартные функции

Функция Chr(k : Byte) : Char «превращает» номер символа в символ. Действие этой функции аналогично действию операции #. Например:

c := Chr(48); {c : Char}
{c = '0'}

Обратной к функции Chr() является уже изученная нами функция Ord(). Таким образом, для любого числа k из диапазона 0 .. 255 и для любого символа с

Ord(Chr(k)) = k  и  Chr(Ord(c)) = c

Надеемся, читатель помнит, что стандартные процедуры и функции Pred(), Succ(), Inc() и Dec(), определённые для значений любого порядкового типа1, применимы также и к символам (значениям порядкового типа данных Char). Например:

Pred('[')  = 'Z'
Succ('z')  = '{'
Inc('a')   = 'b'
Inc('c', 2) = 'e'
Dec('z')   = 'y'
Dec(#0, 4)  = '№' {#252}

Стандартная функция UpCase(c : Char) : Char превращает строчную букву в прописную. Символы, не являющиеся строчными латинскими буквами, остаются без изменения (к сожалению, в их число попадают и все русские буквы).

Стандартные функции и процедуры обработки строк

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

  1. Функция Concat(s1, _ , sN : String) : String осуществляет слияние (конкатенацию) всех перечисленных строк или символов в указанном порядке. Если длина итоговой строки больше 255–ти символов, то произойдет отсечение «хвоста». Кроме того, даже если результат конкатенации не был усечен, но программа пытается сохранить его в переменную заведомо меньшей длины, то усечение всё равно состоится:

    Concat('abc', '3de', ' ', 'X', 'yz') = 'abc3de Xyz'
  2. Функция Copy(s : String; i, k : Byte) : String вычленяет из строки s подстроку длиной k символов, начиная с i–го. Если i больше длины строки, то результатом будет пустая строка. Если же k больше, чем длина оставшейся части строки, то результатом будет только её «хвост»:

    Copy('abc3de Xyz', 2, 4)  = 'bc3d'
    Copy('abc3de Xyz', 12, 4) = ''
    Copy('abc3de Xyz', 8, 14) = 'Xyz'
  3. Процедура Delete(s : String; i, k : Byte) удаляет из строки s подстроку длиной k символов, начиная с i–го. Если i больше длины строки, то ничего удалено не будет. Если же k больше, чем длина оставшейся части строки, то удалён будет только её «хвост»:

     s := 'abc3de Xyz';   
    Delete(s, 2, 3);
    {s = 'ade Xyz'}
     s := 'abc3de Xyz';
    Delete(s, 8, 13);
    {s = 'abc3de '}
  4. Процедура Insert(ss, s : String; i : Byte) вставляет подстроку ss в строку s, начиная с i–го символа. Если i выходит за конец строки, то подстрока ss припишется в конец строки s (если результат длиннее, чем допускается для строки s, произойдёт его усечение):

     s = 'abc3de Xyz';
    Insert('xyz', s, 2);
    {s = 'axyzbc3de Xyz'}
     s := 'abc3de';
    Insert('xyz', s, 12);
    {s = 'abc3dexyz'}
  5. Функция Length(s : String) : Byte возвращает длину строки s:

    Length('abc3de Xyz') = 10
  6. Функция Pos(ss, s : String) : Byte определяет позицию, с которой начинается первое (считая слева направо) вхождение подстроки ss в строку s. Если ss не встречается в s ни разу, функция вернёт 0:

    Pos('X', 'abc3de Xyz') = 8
  7. Процедура Str(x [: w[: d]], s : String) превращает десятичное число x (можно указать, что в этом числе w цифр, из них d дробных) в строку s. Если число короче указанных величин, то спереди и/или сзади оно будет дополнено пробелами:

    Str(156.4 : 7 : 2, s);
    {s = ' 156.4 '}
  8. Процедура Val(s : String; i : <арифметический_тип>; err : Byte) превращает строку s в десятичное число x (в случае ошибки в переменную err будет записан номер первого недопустимого символа):

    {s = '15.47'}
    Val(s, x, err);
    {x = 15.47}

Операции со строками

Сравнения

Строки — это единственный структурированный тип данных, для элементов которого определён порядок и, следовательно, возможны операции сравнения (=, >, <).

На строках определён так называемый лексикографический порядок: из двух строк меньшей считается та, у которой первый различный символ меньше. Считается, что пустая строка меньше любой другой строки.

Таким образом, если начальные символы двух сравниваемых строк совпадают, то эта совпадающая часть никак не повлияет на отношение порядка между строками, поэтому её можно откинуть и сравнивать только первые символы оставшихся подстрок. Если одна из строк полностью совпадает с началом другой, то после удаления совпадающих частей она превратится в пустую строку. Это с очевидностью будет свидетельствовать о том, что начало слова всегда меньше, чем всё слово.

Итак,

'abc' < 'xyz'
'a' < 'abc'
'1200' < '45'
'Anny' < 'anny'

страницы: 1 2 3 4 5

Примечания

  1. ^ См. лекцию 2.
 
 К началу страницы 
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"