Строки

 

Строка есть последовательность символов длиной не более 255 символов. Такие строки так и называются pas-строки. При описании переменных строкового типа в квадратных скобках можно указывать ее максимальный размер. Если размер строки опущен, то подразумевается размер строки, равный 255.

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

var s: string;

       ss: string[4];

begin

    ss := '';

    ss := '*';

    ss := 'комп';

    ss := 'компьютер';

    s := 'компьютер';

end.

{ выделено 256 байт памяти для переменной s }

{ выделено 5 байт памяти для переменной ss }

 

{ текущая длина строки ss  равна 0, строка пустая }

{ текущая длина строки ss равна 1 }

{ текущая длина строки ss равна 4, ss = 'комп' }

{ текущая длина строки ss равна 4, ss = 'комп' }

{ текущая длина строки s равна 9, s = 'компьютер' }

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

Строку всегда можно рассматривать как массив символов, обращаясь к элементам строки по индексу.
Например,

var s : string;

begin

   s := 'мамочка'

   s[1] := 'р';

   writeln (s);

end.

{ текущая длина строки s равна 7, s = 'мамочка' }

{ s = 'рамочка' }

 

Выделение нулевого байта в области памяти, отведенной для строки, накладывает ограничение на размер строки в 255 символов. Именно столько можно хранить в однобайтовом беззнаковом числе. Значение этого байта автоматически изменяется при выполнении операций над строками, которые приводят к изменению длины строки.
Например,

var s: string[10];

begin

    s := '';

    s := 'привет';

    s[7] := '!'; 

    s := s + 'мир';

    s[7] := '!';

end.

{ выделено 11 байт: 10 байт на символы строки и 1 байт на длину строки }

 

{ текущая длина строки s  равна 0, строка пустая }

{ текущая длина строки s равна 6, s = 'привет' }

{ текущая длина строки s не изменилась и равна 6 }

{ текущая длина строки s равна 10, s = 'приветмир' }

{ текущая длина строки s равна 10, s = 'привет!ир' }

 


Из этого примера можно понять, что операция обращения к элементу строки, индекс которой выходит за текущую длину строки, не является корректной. Таких операций следует избегать в программировании.


Рассмотрим основные операции при работе над строками.
Над строковыми переменными определены операции ввода и вывода:

READ(s);

READLN(s);

WRITE(s);

WRITELN(s);

 

-  ввод строки,

-  ввод строки с переносом курсора на начало следующей строки,

-  вывод строки, курсор остается за последним символом строки,

-  вывод строки и перенос курсора на начало следующей строки.

 

К строкам применима операция сложения (по-другому эта операция называется контеканацей двух строк). При сложении двух строк к концу первой строки добавляются символы второй строки. При этом текущая длина результирующей строки будет равна сумме длин двух строк.

s := 'привет,' + 'мир!';             { s='привет,мир!', текущая длина строки s равна 11 }

 

Над строками реализованы все операции сравнения.
Сравнение двух строк выполняется слева направо до первого несовпадающего символа. Строка s1 считается меньше строки s2, если первый несовпадающий символ строки s1 меньше символа строки s2.
Например,

'мамочка' > 'мама'

'мамуля' > 'мамочка'

'мама' < 'папа'

'я' > 'мама и папа'

'мама' < 'маман' 

'о' > 'а'

'у' > 'о'

'м' < 'п'

'я' > 'м'

в совпадающей части символы одинаковы, но строка 'мама' короче строки 'маман'.

 

Адрес: 614039, г. Пермь, ул. Комсомольский проспект, 45
Телефон: +7 (342) 212-80-71
E-Mail: school9-perm@ya.ru
Вопрос администратору сайта