10 Строки.pptx
- Количество слайдов: 16
Pascal СТРОКИ
Массивы символов Строку можно реализовать в виде символьного массива Var S: array [1. . N] of char; При этом: каждый символ – отдельный объект; массив имеет длину N, которая задана при объявлении. Что необходимо: • обрабатывать последовательность символов как единое целое • строка должна иметь переменную длину
Строковые типы данных Фундаментальные типы: Short. String (короткие строки – длина до 255 символов), Ansi. String, Wide. String (длинные строки - до 231) Родовой тип String: равен Ansi. String, если строка описана как Var s: string; равен Short. String, если строка описана как Var s: string[n]; //где n
Символьные строки ! var s: string; длина строки s[3] В Delphi это ограничение снято! s[4] 255 1 6 П р и в е т ! ¤ ¤ ¤ … ¤ ¤ ¤ 1 20 рабочая часть s[1] s[2] var s: string[20]; Длина строки: n : = length ( s ); var i: integer;
Обращение к элементам строки Со строками можно работать как с индексированными массивами символов. Например : s[i] – это символ, расположенный в строке в позиции i (индексы отсчитываются от 1, то есть индекс 1 соответствует 1 -му символу). Для строки типа Short. String или Ansi. String выражение s[i] имеет тип Ansi. Char, для строк типа Wide. String – Wide. Char.
Короткие строки Короткая строка хранит в своем нулевом байте число символов в строке, а в последующих байтах - сами символы (не более 255). Поэтому ord(s[0]) возвращает длину строки, то есть тоже значение, которое возвращает функция length(s). Без нулевого символа в конце.
Короткая строка var S: String[250]; При объявлении переменной S компилятор выделит для ее размещения 250 + 1 = 251 байт и поместит в первый байт (с номером 0) - текущую длину строки.
Длинные строки Переменная этого типа является указателем на динамически выделяемую область памяти, в которой хранится строка. Если длина строки равно нулю, то указатель также равен nil и память под строку не выделяется. Если же строка не пустая, то в выделенной для нее области памяти хранится сама строка, терминальный нуль и число ссылок на данную строку (счетчик ссылок – 4 байта).
Длинные строки var S 1, S 2: String; … S 1: ='Строка символов'; S 2 : = S 1; Может быть несколько переменных, ссылающихся на одну строку. В этом случае в памяти хранится только один экземпляр строки, что позволяет экономить ресурсы.
Длинные строки Если строковой переменной присваивается новое значение, то число ссылок в прежней строке уменьшается на 1, а в новой увеличивается на 1. S 2: =‘Это - ’+S 1; Если число ссылок на данную строку станет равным нулю, то строка уничтожается, а место в памяти освобождается. Если с помощью индексного обращения, в строке изменится один символ, то строка копируется только в том случае, если число ссылок на нее больше 1. Все это позволяет эффективно использовать память.
Операции над строками Операции сравнения (=, <>, >, <, >=, <=). Строки сравниваются посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением #0. Следующие операции отношения дадут значение True: '''' < '. ' 'А' > '1' 'Object' < ' Object Pascal' 'Пас' > 'Pascal' 1.
2. Сцепление (конкатенация) строк +. Выражение S 1+S 2 даст в результате строку, в которой после символов строки S 1 будут расположены символы строки S 2.
Функции и процедуры function length (s: string): integer; - определяет текущую длину строки Пример: s: =‘Привет!’; i: =length(s); j: =length(‘Marina’); k: =length(‘ ’); function copy (S: string; Pos: integer; N: integer): string; - выделяет из строки S подстроку длиной N символов, начиная с текущей позиции Pos. Пример: S: =‘Информатика’; s 1: =copy(s, 3, 5); // результат s 1 будет равна ‘форма’
Функции и процедуры function concat (s 1, s 2, . . sn: string): string; - выполняет сцепление строк s 1, s 2, . . sn в одну Пример: s 1: =‘bbb’; s: =concat(‘aa’, ‘ccc’, b); function Pos (s 1: string; s: string): integer; - обнаруживает первое появление в строке s подстроки s 1. Результат – номер позиции, где находится 1 -ый символ подстроки s 1. Пример: i: =pos (‘as’, ’assa’); j: =pos(‘as’, ‘miraspas’); k: =pos(‘as’, ’site’); n: =pos(‘r’, ‘kol’);
Функции и процедуры function delete (var s: stirng; pos: integer; n: integer); - удаляет N символов из строки S начиная с позиции pos. Пример: s: =‘abcdef’; delete(s, 3, 2); s: =‘abcdef’; delete(s, 2, 6); procedure insert (s 1: string; s: string; pos: integer); - вставляет строку s 1 в строку s начиная с позиции pos. Пример: s: =‘mir’; insert (‘ku’, s, 1); s: =‘рис 2’; s 1: =‘№’; insert(s 1, s, 5);
Функции и процедуру Procedure Set. Length(S: String; New. Length: Integer); - устанавливает новую (меньшую) длину New. Length строки S, если New. Length больше текущей длины строки, обращение к Set. Length игнорируется