Pascal. Строки символов типа String

Строки символов типа String. Операции над строками символов


Содержание


Поиск на других ресурсах:

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) – количество символов в строке.

Pascal. Представление строки типа String в памяти компъютераРисунок 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

...

 


Связанные темы