Песни о Паскале
Шрифт:
• удалять часть символов из строки;
• сравнивать две строки в смысле алфавитного порядка.
Рассмотрим всё это подробней. Представленные далее объявления процедур и функций даны мною лишь для пояснений, их не надо вставлять в программы.
Поиск в строке (Pos)
Функция Pos ищет одну строку внутри другой, её объявление выглядит так:
function Pos(SubS: string; S: string): Integer;
Функция принимает два параметра:
• SubS –
• S – строка, в которой ищут.
Если искомый фрагмент SubS найден, функция возвращает его позицию – индекс первого символа SubS внутри строки S, а иначе возвращает ноль. Если строка S содержит несколько искомых фрагментов, возвращается индекс первого из них. Вот примеры.
S:= 'BORLAND PASCAL';
p:= Pos('LA', S); { 4 }
p:= Pos('PAS', S); { 9 }
p:= Pos('pas', S); { 0 – подстрока не найдена }
p:= Pos('A', S); { 5 – первая из трех букв "A" }
Искомым фрагментом может быть и отдельный символ. Поиск ведется с учетом регистра; это значит, что заглавная и строчная буквы «P» считаются разными буквами.
Копирование части строки (Copy)
Функция Copy возвращает часть заданной строки.
function Copy(S: string; Index, Count: Integer): string;
Входных параметров три:
• S – строка, из которой копируются символы;
• Index – индекс первого копируемого символа;
• Count – количество копируемых символов.
А вот примеры её применения.
S:= ’Free Pascal forever!’;
T:= Copy(S, 6, 6); { ’Pascal’ }
T:= Copy(S, 6, 255); { ’Pascal forever!’ }
Если копируемых символов затребовано больше, чем содержится в исходной строке, то скопируются все символы до конца строки (как в последнем примере).
Вставка в строку (Insert)
Объединять строки сложением просто. А если надо вставить строку в середину другой? Тогда обратитесь к процедуре Insert.
procedure Insert(S1: string; var S2: string; Index: Integer);
Входные параметры:
• S1 – вставляемая строка;
• S2 – ссылка на принимающую строку;
• Index – позиция вставки.
Вот один пример.
S:='Спартакчемпион!';
{ В позицию 8 вставляются три символа: тире и два пробела }
Insert(' – ', S, 8); { Спартак – чемпион! }
Если позиция вставки превышает длину строки S2, то строка S1 добавится в конец S2. Если длина итоговой строки S2 превысит допустимый размер, лишние символы будут отброшены.
Удаление символов из строки (Delete)
Говорят:
procedure Delete(var S: string; Index, Count : Integer);
Параметры таковы:
• S – ссылка на строку;
• Index – индекс первого удаляемого символа;
• Count – количество удаляемых символов.
Вот пример её применения.
S:= ’Free Pascal forever!’;
Delete(S, 6, 7); { ’Free forever!’ }
Сравнение строк
Мы уже сравнивали строки на равенство (вспомните проверку пароля). Но строки сравнивают и на больше–меньше — лексикографически. При этом сравниваются слева направо коды символов двух строк в смысле их алфавитного порядка. Если длины строк разные и короткая совпадает с началом длинной, то большей считается длинная строка. Вот примеры:
Writeln (’Borland’ > ’Pascal’); { false }
Writeln (’ABC’ > ’AB’); { true }
Writeln (’ABC’ > ’abc’); { false }
Writeln (’45’ > ’1000’); { true, поскольку ’4’ > ’1’ }
В первом примере код буквы «B» меньше кода буквы «P», поэтому левая строка меньше правой. Во втором случае первые символы совпадают, но левая строка длиннее, а значит больше. В третьем примере левая строка меньше, — тоже в соответствии с таблицей кодировки. Обратите внимание на неожиданный результат сравнения строк, составленных из цифр, — это вам не числа!
Сравнивая строки, можно отсортировать их в лексикографическом порядке (как если бы они располагались в словаре). К сожалению, такое сравнение работает только для латинских букв, для русских оно не всегда верно, приходится изобретать свою функцию сравнения (в DELPHI этой проблемы нет).
Перевод символов в верхний регистр (UpСase)
Функция UpСase меняет код латинской буквы, переводя её из нижнего в верхний регистр. Иными словами, она превращает строчную (маленькую) латинскую букву в заглавную (большую). Объявление функции таково.
function UpCase(Ch: Char): Char;
Входной параметр – символ, а возвращается почти тот же символ, только «подросший», вот примеры.
c:= UpCase(’r’); { ’R’ }
c:= ’n’;
c:= UpCase( c ); { ’N’ }
Подсунув этой функции большую латинскую букву, цифру или знак препинания, вы получите назад свой символ неизменным. То же будет и с русскими буквами – они не обрабатываются функцией UpСase.