Строки символов типа String. Операции над строками символов
Содержание
- 1. Представление строк символов в языке Pascal. Тип String. Общие сведения
- 2. Примеры объявления строк типа String
- 3. Перечень операций, процедур и функций, работающих со строками символов
- 4. Доступ к отдельному символу в строке S[i]. Операция индексирования
- 5. Операция присваивания строк :=
- 6. Операция +. Конкатенация строк
- 7. Операции =, <>. Сравнение строк на равенство (неравенство)
- 8. Операции >, <, >=, <=. Сравнение строк на большее или меньшее с точки зрения лексикографического порядка
- Связанные темы
Поиск на других ресурсах:
1. Представление строк символов в языке Pascal. Тип String. Общие сведения
В языке Паскаль определены два типа строк:
- строки типа String;
- строки типа PChar. Более подробно о строках типа PChar можно прочесть здесь.
Строки символов есть не что иное как массив символов. Этот составный тип данных занимает важное место при разработке различных программ на Pascal-ориентированных языках. Исходя из этого контекста, стандартный Паскаль допускает два способа сохранения символьных массивов в памяти компьютера:
- распакованный;
- упакованный.
Описание распакованного массива символов выглядит примерно следующим образом:
var M: Array[1..Max] of char;
здесь
- M – имя массива;
- Max – максимально-возможное количество элементов в массиве.
Описание упакованного массива символов содержит дополнительное слово packed
var M: Packed Array[1..Max] of char;
Для преобразования символьного массива из распакованной формы в упакованную и наоборот, в языке Pascal имеются стандартные функции Pack, UnPack.
Любая символьная строка не что иное как упакованный (packed) массив символов. Для удобного описания и использования одномерных упакованных массивов символов в языке Pascal введен тип String. Работу с типом String поддерживают многие стандартные функции языка Pascal. Эти функции упрощают выполнение рутинных (базовых) операций над строками символов.
Строка символов типа String может быть присвоена как константе так и переменной. Любая константа или переменная может объявлять строку символов одним из двух способов:
- с заданной длиной строки;
- без указания длины строки. В этом случае устанавливается длина строки, равная 255 символам. Это максимально возможная длина строки типа String.
Если задается длина строки, то объявление переменного типа String выглядит приблизительно так:
var s : String[50];
здесь
- s – объявляемая строка;
- 50 – максимально-возможная длина строки.
Если строка s объявляется без указания длины, то вид такого объявления следующий:
var s : String;
Такие же правила объявлений действуют для констант и типов.
В памяти строка типа String занимает на 1 байт больше его длины. В нулевой позиции строки указывается длина строки (рисунок 1) – количество символов в строке.
Рисунок 1. Представление строки типа String в памяти компъютера
Тип String без указания длины совместим со всеми типами строк. Отдельный символ строки является типом Char.
⇑
2. Примеры объявления строк типа String
type // Объявление типов строк MySting20 = String[20]; IdCode = String[10]; // Идентификационный код Character = String[1]; // Единичный символ как строка const // Объявление строк как типизированных констант Mon : String = 'Monday'; Jan : String = 'January'; var // Объявление строк как переменных s1 : String[50]; s2 : String;
⇑
3. Перечень операций, процедур и функций, работающих со строками символов
Для строк типа String определены следующие операции:
- := – присваивание;
- + – слияние (конкатенации);
- сравнение. Для сравнения строк применяются любые операции отношения (=, <>, >, <, >=, <=). Сравнение строк происходит посимвольно, начиная с первого символа. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны.
Для доступа к отдельному символу в строке определена операция индексирования
S[i]
здесь
- S – строка;
- i – позиция символа в строке, которая нумеруется с 1.
Со строками символов используются следующие процедуры и функции:
- Concat – сцепляет (конкатенирует) две строки;
- Copy – возвращает подстроку из строки;
- Delete – удаляет подстроку из строки;
- Insert – вставляет (добавляет) подстроку в строку;
- Length – возвращает длину строки;
- Pos – осуществляет поиск подстроки в строке;
- Val – конвертирует строку в число;
- Str – конвертирует число в строку.
⇑
4. Доступ к отдельному символу в строке S[i]. Операция индексирования
Для получения отдельного символа строки используется операция индексирования. В наиболее простом виде общий вид операции получения символа
c := S[index];
здесь
- c – символ типа Char;
- s – исходная строка;
- index – позиция символа в строке. Нумерация index начинается с 1.
Операция индексирования может использоваться и в левой части оператора присвоения. Это означает, что допускается изменять значение в строке. Приблизительный код изменения значения следующий
S[index] := c;
здесь
- s – строка типа String;
- index – позиция в изменяемой строке. Значение index нумеруется с 1;
- c – символ типа Char, заменяющий символ S[index].
Приклад.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var c : Char; s : String; begin // Заданная строка S := 'Hello, world!'; // Получить символ с индексом 5 c := S[5]; Writeln('c = ', c); // c = o // Получить символ с індексом 1 c := S[1]; Writeln('c = ', c); // c = H // Получить последний символ строки c := S[Length(s)]; Writeln('c = ', c); // c = ! // Попытка изменить значение S[8] S[8] := 'W'; // допускается Writeln(S); // Hello, World! Readln; end.
Результат выполнения программы
c = o c = H c = ! Hello, World!
⇑
5. Операция присваивания строк :=
Полезной операцией для работы со строками является операция :=, которая осуществляет присваивание строк. Общий вид использования операции следующий:
S1 := S2;
здесь
- S1 – строка-приемник, получающая значение строки S2. Предыдущее значение строки S1 теряется;
- S2 – строка-источник.
При присвоении строк делается полная копия строки-источника. Это означает, что строки размещаются на разных участках памяти.
Пример.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var s1 : String; s2 : String; begin // Задать значение строкам S1 := 'Pascal'; S2 := 'Delphi'; // Присвоить строке S1 новое значение S1 := S2; // Вывести результат Writeln('S1 = ', S1); Writeln('S2 = ', S2); // Изменить строку S2 S2 := 'JavaScript'; // Вывести S1 и S2 Writeln('S1 = ', S1); Writeln('S2 = ', S2); Readln; end.
Результат выполнения программы
S1 = Delphi S2 = Delphi S1 = Delphi S2 = JavaScript
⇑
6. Операция +. Конкатенация строк
Добавление (конкатенацию) строк можно производить с помощью операции + (плюс). В наиболее общем случае реализация сложения строк выглядит следующим образом:
s := s1 + s2 + ... + sN;
здесь
- s – строка, что есть результатом конкатенации строк s1, s2, …, sN;
- s1, s2, sN– некоторые строки.
Пример.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var S1, S2, S3 : String; begin // Конкатенация строк S1 := 'Hello'; S2 := 'world'; S3 := S1 + ', ' + S2 + '!'; Writeln(S3); // Hello, world! S1 := 'ABCD'; S1 := S1 + S1; Writeln(S1); // ABCDABCD Readln; end.
⇑
7. Операции =, <>. Сравнение строк на равенство (неравенство)
В языке Паскаль строки допускают сравнение на равенство/неравенство. Для сравнения строк используются операции =, <> по следующему образцу
S1 = S2 S1 <> S2
Результатом выполнения операций является логическое значение True или False. Сравнение строк применяется в операторах, допускающих выполнение логических операций.
Пример.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var S1, S2 : String; begin // Сравнение строк Write('S1 = '); Readln(S1); Write('S2 = '); Readln(S2); // Операция = if S1 = S2 then Writeln('Strings are equal') else Writeln('Strings are not equal'); // Операция <> (не равно) if S1 <> S2 then Writeln('Strings are not equal') else Writeln('Strings are equal'); Readln; end.
Результат выполнения программы
S1 = abcd S2 = abcd Strings are equal Strings are equal
⇑
8. Операции >, <, >=, <=. Сравнение строк на большее или меньшее с точки зрения лексикографического порядка
Для сравнения строк в лексикографическом порядке используются операции >, >=, <, <=. В наиболее общем случае сравнение двух строк S1 и S2 имеет следующий вид
S1 < S2 S1 <= S2 S1 > S2 S1 >= S2
Результатом операций является значение True или False. Лексикографический порядок знаков в строках определяется числовым значением кодов этих знаков.
Так, например, код символа ‘A’ следует перед кодом символа ‘B’. Соответственно выражение
'A' < 'B'
вернет результирующее значение True.
Пример.
... // Сравнение строк S1 := 'ABC'; S2 := 'ABCD'; res := S1 >= S2; // res = False res := S1 > S2; // res = False res := S1 <= S2; // res = True res := S1 < S2; // res = True ...
⇑
Связанные темы
- Функции работы со строками символов. Функции Concat, Copy, Delete, Insert, Length, Pos, Val, Str
- Логические типы. Символьные типы. Строчные типы
⇑