Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль_Конспект лекций.doc
Скачиваний:
41
Добавлен:
27.05.2015
Размер:
1.39 Mб
Скачать

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

Возможны строковые присваивания:

S := 'Мама мыла раму';

S : = 'ABC ' ;

S := S1;

При работе со строками допустимо использовать операцию конкатенации (сложения - «+»).

Пример:

Sl := 'ABC’ ;

S2: = 'DEF’ ;

S := S1 +S2;

После выполнения последнего оператора присваивания переменная S будет иметь значение 'ABCDEF'.

Как явствует из примера, сложение строк - это простое их объединение, причем первое слагаемое стоит в новой строке на первом месте, второе - на втором и т. д.

Для работы со строками существует набор специфичных процедур и функций.

Length(S) - функция определяет реальную длину строки (количество символов). Тип результата – integer, тип аргумента S - string.

Примеры:

1)

S : = 'ABCD' ;

t := length (S) ;

После выполнения оператора присваивания целая переменная t будет иметь значение 4 (символа).

2)

S:= 'Мама мыла раму';

t:= length (S) ;

После выполнения последнего оператора присваивания целая переменная t будет иметь значение 14 (символов).

Pos( Sl, S2 ) - функция возвращает число типа byte, равное номеру первой позиции вхождения подстроки S1 в строку S2.

Примеры:

1)

S:= 'ABCDEF';

Sl:= 'CDE';

t := pos(Sl , S);

Переменная t будет иметь значение 3.

2)

S:= 'АВСАВСАВСАВС ‘ ;

S1:= 'BС';

t := pos(S1, S) ;

Переменная t будет иметь значение 2.

Copy ( S, n, l) - функция возвращает подстроку длиной l символов из строки S начиная с символа, имеющего номер позиции n.

Примеры:

1)

S := 'ABCDEFG’ ;

S1 := copy(S, 3, 4);

В данном случае функция возвратит значение 'CDEF'.

2)

S := 'мама мыла раму';

S1 := copy(S, 6, 4);

Функция возвратит значение 'мыла'.

Delete( S, n, l ) — процедура удаляет l символов из строки S, начиная с позиции n.

Примеры:

1)

S := 'ABCDEFG’;

delete (S, 3, 4) ;

После вызова процедуры переменная S будет иметь значение 'ABG'.

2)

S := 'мама мыла раму';

delete (S, 6, 5);

Переменная S будет иметь значение 'мама раму'.

Insert( S1, S2, n ) - процедура вставляет строку S1 в строку S2, начиная с позиции n.

Примеры:

1)

S:= 'ABCDE';

S1:= 'GHIJ’;

Insert(S1, S, 3);

После вызова процедуры Insert переменная S будет иметь значение 'ABGHIJCDE'.

2)

S := 'мама раму';

S1 := 'мыла ';

Insert(S1, S, 6) ;

Переменная S будет иметь значение 'мама мыла раму'.

В отличии от массивов, строки можно выводить на экран и вводить с клавиатуры используя операторы Write и Writeln, Read, Readln.

Примеры:

Write('мама ');

Write('мыла ') ;

S': = 'раму' ;

Writeln (S) ;

Read(S);

Readln(S1) ;

Задача:

С клавиатуры вводится строка символов, в которой некоторая подстрока заключена в круглые скобки. Например:

'ABC(DEFG)HUK' или 'мама (мыла) раму'.

Требуется отделить фрагмент в скобках и вывести его на экран.

program р9_2;

var

S: String;

nl, n2: integer;

begin

Writeln('Введите строку');

Readln(S) ;

{ находим позицию первого вхождения '(' }

nl := pos( '(', S);

{- находим позицию первого вхождения ')' }

n2 := роз( ')', S);

{ по двум позициям определяем длину фрагмента = n2 - nl -1 }

S := copy (S, nl + 1, n2 - nl - 1}; { и вырезаем фрагмент }

Writeln(' Фрагмент строки:', S);

end.

Задача. С клавиатуры вводится строка. Рассматривая ее как предложение, слова в котором разделяются одним или несколькими пробелами, разбить ее на слова, а слова вывести на экран. Каждое с новой строки.

program p9_3;

Const

S: String = 'ABC DEFG HIJ KL';

var

i: integer;

S1: String;

begin

i: = 1;

writeln(' Список слов:');

while i < = length(S) do

begin

{ проходим по возможной цепочке пробелов }

While ( S[i] = ' ') and (i <= length(S)) do i : = i + 1 ;

S1 : = '' ; { S1 – пустая строка }

{ проходим по слову }

While ( S[i] <> ' ') and ( i <= length(S)) do

begin

S1:= S1 + S[i];

i : = i + 1 ;

end;

Writeln(S1);

end;

end.

Для преобразования строковых значений в числовые (целые, вещественные) можно воспользоваться процедурой Val.

Val( S, X, Er) – процедура преобразует строку S в число, которое записывает в переменную X. В процессе перевода строки в число может возникнуть ошибка, например, строка содержит нецифровой символ. Поэтому, в параметр Er записывается значение ноль, если перевод в число прошел успешно и номер символа, на котором перевод был прерван, в обратном случае. Тип параметра Х может быть целым и вещественным, по желанию пользователя. Примеры:

1)

{ X: Integer}

S:= '423' ;

Val (S, Х, Er);

{после вызова процедуры целая переменная X будет иметь

значение 423, а Еr = 0 }

2)

{R: Real}

S:= ‘ 423.5' ;

Val (S, R, Er);

{ Переменная R будет иметь значение 423. 5, а Er = 0 }

3)

{ X: Integer}

S := ' 342ABC ' ;

Val(S, X, Er);

{ после вызова процедуры Ег = 4, на четвертом символе

произошел сбой }

Ниже приведена программа для преобразования строки символов в целое число.

program р9_4;

var

I, Code: Integer;

S: String;

begin

WriteLn('Введите строку для преобразования ');

ReadLn(S);

Val (S , I, Code) ;

{ Если произошла ошибка... }

if Сode <> 0 then Writeln('Ошибка в позиции: ' , Code)

else Writeln( 'Значение= ', I);

end.

Процедура Str преобразует число (целое или вещественное) в символьный вид - строку. Обращение к процедуре - Str ( X, S) , X – целое или вещественное число, S – символьный вид этого числа. При переводе числовых значений можно указывать формат перевода, подобно тому, как мы это делали при вызове Write и WriteLn.

Примеры:

{ Т: Integer }

Str(T: 6, S) ;

{М: Real}

Str(M : 4: 2, S);

Str(T, S);

Str(M, S);

Ниже приведена программа для преобразования произвольного числа в строку.

program p9_5;

const I = -5322;

var

S: string [11] ;

begin

Str(I, S) ;

Writeln(' Число =', S ) ;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]