Строковый оператор в Pascal — string

String – тип представления данных, в котором значениями переменных выступают символы алфавита. Любая из переменных может быть как с определенным количеством байтов, так и совершенно разной длины.

На фото изображено окно программы IDE PascalABC.Net.

Как тип представляется в памяти

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

Проблемы в представлении

Как и везде, тут выступают несколько недочетов в представлении данного типа данных:

  1. Каждая строка может занимать немалый объем (вплоть до многих десятков Мб);
  2. Неоднозначный размер, отсюда будут проблемы при редактировании текста.

Как относится к памяти компьютера

Есть два различающихся подхода, чтобы представить строку в памяти.

Массив

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

Такой метод устарел и был оптимизирован, получился формат caddr. Отличается он от Pascal strings тем, что массивы и их размеры выступают как частицы указания на определенную строку.

Преимущества:

В любое время программа будет иметь доступ к информации о размерах строк, благодаря чему многие действия будут выполняться намного быстрее;

  • Возможность хранения различного типа данных;
  • Предоставляется возможным отслеживание поведения строки;
  • Операции на подобии “взять N-ый символ с конца” совершаются намного быстрее.

Недостатки:

  • Обработка символов является проблематичной для строк произвольной длины;
  • Большой объем выделенной памяти для хранения;
  • Строки не имеют неограниченный размер. В более современных языках влияет не так сильно, потому что максимум может достигать до 4 гигабайт;
  • Если вы будете применять алфавиты, имеющие изменчивый размер символов (UTF-8), будет храниться байтовый размер всех строк, а не количество символов в них, из-за чего его нужно считать независимо от размеров строк.

 «Завершающий байт»

Второй метод подразумевает использовать конечный байт. Случайное значение какой-либо буквы или символа (обычно 0) будет использоваться в качестве конечной точки, а сама строка будет храниться в виде последовательности байтов. В некоторых системах значение символов берется 255 вместо нуля.

У такого метода есть несколько названий:

  1. ASCIIZ (значение 0 на конце);
  2. C-strings (наиболее популярен в Си);
  3. Ноль-терминированные строки.

Преимущества:

  • Последовательность избавляется от служебной информации (не считая конечного байта);
  • Ее можно представить, не создавая новый тип данных;
  • Размер строки не ограничен;
  • Разумное выделение памяти;
  • Функции для передачи строк падают на начальный символ.

Недостатки:

  • Более долго выполнение операций для того, чтобы узнать информацию о строке;
  • Выход з максимальное значение не контролируется;
  • При неполадках конечного байта может повредиться значительная область памяти (это, в свою очередь, способно привести к серьезному ущербу);
  • Конечный байт, а точнее его символ, не может использоваться как часть последовательности;
  • Невозможность использования определенных библиотек, в которых символ может занимать до нескольких байт (UTF-16).

Использование одновременно двух методов

Во многих языка, таких как Оберон, строка и представляется массивом, и конец ее имеет нулевой символ. Этот метод объединяет оба подхода, объединяя их преимущества и избегая много недостатков.

Какие бывают операции

Простейшие операции

В них входят:

  • Использование индексов для нахождения символов по ним;
  • Соединение одной последовательности с другой.

Производные операции

Включают в себя:

  • Нахождение подстроки по номеру конечного и начального символа;
  • Нахождение и замена подстроки;
  • Не допустить повторение строк;
  • Получение информации о длине последовательности;
  • Свертка;
  • Фильтр критерий для одних и тех же списков.

Более сложные операции

Подразумевают:

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

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

В прошлые времена кодировка символов выглядела как 1 символ = 1 байт, то есть 8 бит (были случаи 1 символ = 7 бит). Это давало возможность применить 256 (128 при кодировке 7 бит) значений. Но, чтобы полноценно представить информацию этих 256 символов было недостаточно. Чтобы решить эту проблему, применялись такие методы:

Использование управляющих кодов для переключения языка. При использовании такого способа последовательность символов теряла смысл из-за отсутствия кода управления в начале, но все-таки нашел свое место в ZX-Spectrum и БК.

Использование UTF-16 и UTF-32 (несколько байт на символ). Такой метод не позволяет совмещать себя с другими областями, которые используются для работы с текстом. Из-за того, что символ “0” мог встретиться в абсолютно любом месте в строке, то это мешало работе библиотек.

Использование различных методов кодировок с плавающим значением символа (UTF-8). Такой метод приведет к проблемам в использовании прямого адреса символа, но позволяет совместить себя с устаревшими библиотеками.

Ссылка на основную публикацию