Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Символы / Strokatext.doc
Скачиваний:
5
Добавлен:
10.02.2015
Размер:
158.21 Кб
Скачать

Тип данных строка

Строка, как тип данных, представляет собой произвольную последовательность символов, заключенную в апострофы. Например, 'ВАР7876l;jhd' , '''' или ''. Второй пример показывает, что символ апострофа внутри строки должен быть повторен дважды, а третий пример показывает, что строка может быть пустой (в отличие от символа, который пустым быть не может). Строковый тип относится к структурным типам, строка во многом похожа на одномерный массив символов, но в отличие от массива, количество символов в строке может меняться в ходе работы программы, и строка всегда хранит информацию о своей текущей длине. Эта информация представлена в нулевом элементе строки: код хранящегося там символа равен текущей длине строки. Например, переменнойs, описанной какs:shortstring; присвоено значениеs:=’ABCD’; В этом случаеOrd(s[0]) равно четырем. Строку можно обрабатывать как одномерный массив, т.е. обращаться к отдельным элементам строки по их номерам (индексам). Но делать это надо аккуратно, так как в противном случае могут получаться неожиданные результаты. Это демонстрирует следующая программа.

  1. program stroka1;

  2. {$APPTYPE CONSOLE}

  3. uses

  4. SysUtils;

  5. Var s:shortstring;

  6. begin

  7. s:='';

  8. s[1]:='M';

  9. s[2]:='G';

  10. s[3]:='T';

  11. s[4]:='U';

  12. writeln(s);

  13. readln;

  14. end.

При выполнении этой программы будет отпечатана пустая строка, несмотря на то, что первым четырем элементам строки были присвоены значения определенных символов. Это связано именно с тем, что работа со строкой проводилась как с обычным массивом, т.е. в данном случае после того как строке было присвоено значение пустой строки (длина стала равной нулю) в дальнейшем ее длина не изменялась. При подобной работе следовало бы изменить длину строки перед ее выводом с помощью следующего оператора присваивания s[0]:=Chr(4). Этот простой пример показывает нецелесообразность работы со значениями строкового типа как со значениями типа одномерного массива символов. Правильный результат можно получить более просто, если обрабатывать строку по правилам, присущим этому типу данных. Поэтому следовало бы в программе записать вместо нескольких операторов присваивания одинs:= 'MGTU'.

В языке ObjectPascalопределены следующие типы строковых данных: 1)короткая строкаShortStringилиString[N], гдеN≤255; 2)длинная строкаString; 3)широкая строкаWideString; 4)нуль-терминальная строкаPChar.

Короткая строка имеет максимальную длину 255 символов, общая длина строки на один символ больше, поскольку символы размещаются, начиная со второго по счету символа, а код первого символа (с номером ноль) соответствует текущей длине строки. Каждый символ кодируется одним байтом. Тип ShortStringэквивалентен типуString[255]. Если в программе используются строки, длина которых меньше 255, то целесообразно использовать типString[N], указывая с помощью константыNмаксимальную длину строки и экономя тем самым память. Короткие строки являются статическими данными.

Длинные строки типа Stringявляются динамическими данными. Память для них выделяется на этапе выполнения программы в соответствии с текущей длиной строки. Переменная этого типа содержит адрес первого байта памяти, выделенной для хранения строки (см. раздел ). Длина строки может изменяться от 0 до 2 Гбайт. Длинная строка не может являться элементом файла. При обработке длинных строк необходимый объем памяти выделяется без вмешательства программиста. Для отсечения части строки в программе можно воспользоваться процедуройSetLength(VarS:string;n:integer); установки новой (более короткой) длины.

Широкая строка WideStringидентична строке типаString, но отличается тем, что для кодирования каждого символа используется не один, а два байта.

Нуль-терминальная строка типа PCharпредставляет собой динамический тип данных, переменная этого типа хранит адрес первого байта памяти, начиная с которого размещена строка. В отличие от типаStringнуль-терминальная строка может иметь произвольную длину, ограниченную только доступной памятью. В конце такая строка ограничена символом с нулевым кодом, т.е. #0.

Операции над строками

Над строками можно выполнять операцию конкатенации (сцепления, сложения). Операция обозначается символом плюс (+). Например, s1:='МАШ';s2:='ИНА'; При выполнении оператораs3:=s1+s2; строкаs3 получит значение 'МАШИНА'. При сложении строк последние символы итоговой строки усекаются до длины строки-результата, если суммарная длина складываемых строк превышает длину строки, которой присваивается результат. Например, при выполнении следующего фрагмента программы строкаsполучит значение 'Маша шла в'

Соседние файлы в папке Символы