Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К1_Допматериалы(02дек12).doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
3 Мб
Скачать
☆

Строковые типы

Задают строку символов, которая может иметь разную длину в пределах заданных границ.

Строковые типы в Borland Pascal

String

Базовый тип, совместим со всеми производными строковыми типами.

Максимальная длина строки - 255 символов.

String[n]

Строка, длиной не более n символов (1<=n<=255); производный тип.

  • ФОРМАТ ЗНАЧЕНИЯ

Строку можно представить как массив символов, проиндексировав ее с помощью индексного выражения, значение которого должно быть в диапазоне 0..n, где n - размер строки, указанный в описании.

Реальная длина строковой переменной больше объявленной на 1 байт (ее нулевой символ S[0] содержит динамическую длину строки). Если указать индекс строки вне ее текущей длины, то значение строки не изменится.

Length(S)=Ord(S[0]) <=Sizeof(S)

  • ПРИМЕР 1. Работа со строкой:

Program Test_Str;

Var

S:string[6];

I:Integer;

Begin

…

S:='abc';

Writeln(Sizeof(s)); {7}

Writeln(s); {'abc'}

For i:=1 to Ord(S[0]) do

Write(s[i]); {'abc'}

…

End;

  • ПРИМЕР 2. Заполнение строки пробелами с помощью стандартной процедуры Fillchar.

var

S: string[80];

begin

FillChar(S, SizeOf(S), ' ');

S[0] := #80;

end.

  • Для корректной работы со значением типа String в среде Delphi версии 2.0 и выше желательно отказаться от прямых обращений к нулевому байту. Для получения сведений о текущей длине строки используйте функцию Length, а для установки ее новой длины - процедуру SetLength().

Строковые типы в Delphi

ShortString

Строка символов AnsiChar длиной до 255 символов.

Синоним типа String в Borland Pascal. Используется для обратной совместимости.

AnsiString

Строка символов AnsiChar длиной до 2 ГБ. Основной строковый тип Delphi.

String

Родовой тип.

В зависимости от установки ключа компиляции {$H} (Project>Options>Compiler-Huge Strings) интерпретируется как

{$H-} - ShortString

{$H+} – ANSIString

WideString

Строка двухбайтовых символов WideChar длиной до 2 Гб.

  • ФОРМАТ ЗНАЧЕНИЯ

Формат значений строковых типов Delphi (кроме ShortString и String[n]) отличается от формата значений строк в Borland Pascal.

  • См. также типы PChar, PAnsiChar, PWideChar

  • ПРЕДСТАВЛЕНИЕ ЗНАЧЕНИЙ

  1. Последовательность символов, заключенная в одинарные кавычки:

'' (пустая строка) '''' (одинарная кавычка)

'Hello, world' 'Введите значение параметра:' '0123456789'

  1. Значения, содержащие коды управляющих символов/символы с префиксом #:

'012345'#54#55#56'9' эквивалентно '0123456789'

Write(^G'Hello, world!'#13#10); {сигнал, вывод строки, переход на следующую строку}

Простые константы

Const

Hello='Hello, world';

Newline=#13#10

Типизированные константы

NewLn : string[2] = #13#10;

TrueStr: string[5] = 'Yes';

FalseStr: string[5] = 'No';

  • ОПЕРАЦИИ НАД СТРОКАМИ

  1. Присваивание (совместим по присваиванию с символьным типом):

S1:='Hello';

  1. Слияние строк (конкатенация): S1:=S1+#32+'World'; { Hello World}

  2. Сравнение (<,>,>=,<=,=,<>)

Строки равны, если имеют одинаковую длину и посимвольно эквивалентны. Если в очередной паре один символ больше другого, то строка будет тоже больше; любой символ больше "пустого места".

'abc' <> 'abcd' {True}

'aBc' <='abc' {True:#66<#98}

' abc' < 'abc' {True:#32<#97}

'abc '<>'abc' {True: #32>"пустого места"}

  • СОВМЕСТИМОСТЬ СТРОКОВЫХ ТИПОВ

  • Типы совместимы, если один – строковый, а другой символьный.

  • Типы T1 и T2 совместимы по присваиванию (для V1 типа T1 и V2 типа T2 выполнимо V1:=V2), если:

  • T1 и T2 – строковые типы;

  • T1 – строковый тип, T2 – символьный.

  • КЛЮЧ КОМПИЛЯЦИИ {$V} (для параметров-переменных)

Пункт меню Project>Options>Compiler-Strict Var-Strings

Проверка соответствия типов формальных и фактических параметров-строк в подпрограммах.

  • {$V+} - строгая проверка: типы формальных и фактических параметров должны совпадать.

  • {$V-} - формальные и фактические параметры могут быть различными строковыми типами.

  • ЗАДАНИЕ 4. Ознакомьтесь с назначением следующих стандартных подпрограмм для работы со строками и их отдельными параметрами. Приведите примеры.

function Concat(s1 [, s2,..., sn]: String): String;

function Copy(S: String; Index: Integer; Count: Integer): String;

procedure Delete(var S: String; Index: Integer; Count:Integer);

procedure Insert(Source: String; var S: String; Index: Integer);

function Length(S: String): Integer;

function Pos(Substr: String; S: String): Byte;

procedure Val(S; var V; var Code: Integer);

procedure Str(X [: Width [: Decimals ]]; var S:string);

  • ЗАДАНИЕ 5. А) Укажите, что будет получено при выполнении следующих подпрограмм для строки S=’ПЕРВЫЙ СЕМЕСТР’

S:=COPY(S, 3,3)

DELETE(S, 2, 9)

INSERT(’HELLO’, S, 1)

S:=CONCAT (’HELLO ’,S)

I:=POS(’Р’, S)

Б) Укажите, что будет получено при выполнении следующих подпрограмм для строки S=’ИНФОРМАТИКА’ i=3 j=5

S:=COPY(S, i, j)

DELETE(S, i+1, j+1)

INSERT(’ФОРМА’, S, j+3)

S:=CONCAT (’ЗАЧЕТ’,’ ’, S)

I:=POS(’ТИК’, S)

  • ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ СТАНДАРТНЫХ ПОДПРОГРАММ ДЛЯ РАБОТЫ СО СТРОКАМИ

var

s,s1:String;

begin

{Исходная строка}

s:=' adcd EFG HI 123 ';

writeln(s); {S: ' adcd EFG HI 123 '}

{Удаление ведущих пробелов}

while pos(' ',s)=1 do

delete(s,1,1);

writeln(s); {S: 'adcd EFG HI 123 '}

{Удаление замыкающих пробелов}

while (length(s)>1)and (s[length(s)]=' ') do

delete(s,length(s),1);

writeln(s); {S: 'adcd EFG HI 123'}

{Удаление лишних (более двух подряд) пробелов}

while pos(' ',s)<>0 do

delete(s,pos(' ',s),1);

writeln(s); {S: 'adcd EFG HI 123'}

{Выделение всех слов в строке (разделители-пробелы)}

s:=s+' ';

while pos(' ',s)<>0 do

begin

s1:=copy(s,1,pos(' ',s)-1);

writeln(s1); {вывод слов: 'adcd', 'EFG', 'HI', '123'}

Delete(s,1,pos(' ',s));

end;

end.

  • ТЕМА. МНОЖЕСТВА