Строки и средства их обработки
Тип String допускает и пустую строку — строку, не содержащую символов: EmptyStr := '' {подряд идущие кавычки}. Она играет роль нуля (нейтрального элемента) операции конкатенации: EmptyStr + X = X + EmptyStr = X. Над строками определена операция конкатенации «+», результат которой — строка, в которой операнды соединены в порядке их следования в выражении. Например: Delete (var X: String; Index… Читать ещё >
Строки и средства их обработки (реферат, курсовая, диплом, контрольная)
Значением строкового типа данных являются строки. Стандарт языка предусматривает использование строк только как констант, используемых в операторах вывода Write, Writeln. В расширении языка Turbo-Pascal строковый тип данных определен гораздо полнее.
Рис. 3. Определение строкового типа
Здесь целое принадлежит диапазону 1.255 и означает максимальное количество символов в строке этого типа. Если описание типа String используется без указания максимального количества символов, это (по умолчанию) означает, что под этот тип резервируется 255 символов.
Например:
Type Name = String[20]; { строки из 20-ти символов }.
Post = String; { строки из 255-ти символов }.
Процедуры и функции типа String.
Над строками определена операция конкатенации «+», результат которой — строка, в которой операнды соединены в порядке их следования в выражении. Например:
'Turbo' + 'Pascal' = 'TurboPascal'; 'Turbo_' + 'Pascal ' + 'System' = 'Turbo_Pascal System';
Поэтому результатом выполнения серии операторов будут выведенные на экран строки Пример сложения строк.
X := 'Пример'; У := 'сложения'; Z := 'строк';
Writeln (X + Y + Z); Writeln (Y + ' ' + Z + ' ' + X).
Тип String допускает и пустую строку — строку, не содержащую символов: EmptyStr := '' {подряд идущие кавычки}. Она играет роль нуля (нейтрального элемента) операции конкатенации: EmptyStr + X = X + EmptyStr = X.
Над строками определены также отношения (операции логического типа).
" = «, ««, ««, «= «.
Таким образом, каждый из строковых типов упорядочен, причем лексикографически. Это означает, что.
- а) порядок на строках согласован с порядком, заданным на символьном типе (Char);
- б) сравнение двух строк осуществляется посимвольно, начиная с первых символов;
- в) если строка A есть начало строки B, то A < В;
- г) пустая строка — наименьший элемент типа.
Например:
- а) 'с' < 'k', так как Ord (`c') < Ord (`k');
- б) 'abс' < 'abk', так как первые два символа строк совпадают, а сравнение третьих дает Ord (`c') < Ord (`k');
- в) 'abс' < 'abkd', так как первые два символа строк совпадают, а сравнение третьих дает Ord (`c') < Ord (k);
- г) 'ab' < 'abсd', так как строка 'ab'- начало строки 'abсd'.
На строковом типе данных определены:
Функции:
a) Length (X: String): Byte; - длина строки X; { Length (EmptyStr) = 0 }.
- б) Pos (Y:String; X: String):Byte; - позиция первого символа первого слева вхождения подстроки Y в строку X. Если X не содержит Y, Pos (Y, X) = 0.
- в) Copy (X:String; Index, Count: Integer):String — подстрока строки X, начинающаяся с позиции Index и содержащая Count символов.
- г) Concat (X1, X2, ., Xk: String): String; - конкатенация строк Х1, X2, ., Xk. Другая форма записи суммы X1+X2+. +Xk.
Процедуры:
д) Delete (var X: String; Index, Count: Integer); Из строки X удаляется Сount символов, начиная с позиции Index. Результат помещается в переменную X.
e) Insert (Y:string; var X: String; Index: Integer); В строку X вставляется строка Y, причем вставка осуществляется начиная с позиции Index.
Стандартные процедуры ввода-вывода Паскаля расширены для ввода-вывода строк. Отметим, однако, что для ввода нескольких строковых данных следует пользоваться оператором Readln. Оператор Read в этих случаях может вести себя непредсказуемо.
Пример 2. Дан массив A[1.n] of string[20]. Составить программу замены всех первых вхождений подстроки L в A[i] на подстроку R. Строки L и R вводятся с клавиатуры в виде равенства L = R. Результат замен отобразить в массив, элементы которого — равенства вида A[i]=результат замены L на R в A[i].
Program RewriteArray;
Const n = 100; Single = 20; Double = 41;
Type.
Sitem = string[Single]; Ditem = string[Double];
SWordArray = array[1.n] of Sitem; DWordArray = array[1.n] of Ditem;
Var.
A: SWordArray; B: DWordArray;
L, R: Sitem; X: Sitem;
i, Index: Integer;
Procedure InpWord (var U, V: Sitem);
Var X: Ditem;
j: Integer;
Begin.
Writeln ('________ Ввод равенства L = R __________');
Read (X); j := Pos ('=', X);
U := Copy (X, 1, j — 1);
V := Copy (X, j + 1, Length (X)).
End;
Procedure InpArray;
begin.
Writeln ('====== Ввод массива слов ======');
For i:=1 to n do Readln (A[i]).
end;
Procedure OutArray;
begin.
Writeln ('====== Вывод массива слов ====');
For i:=1 to n do Writeln (B[i]).
end;
Begin.
InpArray; {ввод массива слов с клавиатуры}.
InpWord (L, R); {ввод и анализ равенства L = R}.
For i := 1 to n do begin.
X := A[i]; Index := Pos (L, X);
If Index 0.
then begin.
Delete (X, Index, Length (L));
Insert (R, X, Index).
end;
B[i] := A[i] + '=' + X.
end;
OutArray; {вывод массива слов на печать }.
End.