
- •Практикум 11. Работа со строками
- •Типы строк в DELPHI.
- •У статического массива текущая (актуальная) длина хранится как число типа BYTE в нулевом
- •Задание 1
- •Каркас приложения
- •Функция удаления знаков препинания с подсчетом числа удалений
- •Основная программа
- •Функция формирования массива слов. Часть 1. Подготовка строки
- •Функция формирования массива слов. Часть 2. Формирование массива.
- •Восновной программе добавить печать массива слов. Предварительно надо объявить переменные. После отладки отладочные
- •Задание 2
- •Функция сортировки с подсчетом перестановок
- •Основная программа
Практикум 11. Работа со строками
1.Типы строк в DELPHI.
2.Использование функций и процедур работы со строками.
3.Разбить строку на слова.
4.Сортировка слов по различным критериям.
Типы строк в DELPHI.
Строка в DELPHI - это одномерный массив символов, организованный специальным образом. Различают два вида строк по признаку статического или динамического выделения памяти под массив.
Var s80 : string[80];// Статическое sd : string; // Динамическое
begin
s80:=' Static string length='; // size=81 writeln(s80,length(s80),' size=',sizeof(s80)); sd:=' Dynamic string length='; // size=4 writeln(sd, length(sd), ' size=',sizeof(sd)); readln;
end.
У статического массива текущая (актуальная) длина хранится как число типа BYTE в нулевом элементе. Ее можно посмотреть непосредственно writeln(byte(s80[0])); Максимальная длина статической строки 255 символов.
Для динамических строк элемент sd[0] не доступен. Получить информацию о текущей длине такой строки можно только через функцию length(sd). Управление текущей длиной строки осуществляется с помощью символа #0 (нуль-терминатор), которым обозначается конец строки. Посмотреть на него можно, например так: writeln(byte(sd[length(sd)+1]));
Задание 1
•Дана строка произвольной длины, состоящая из слов, знаков препинания и других разделителей
•Сформировать из этой строки массив слов, не содержащий разделителей (создать словарь)
Каркас приложения
Type Tw = array[1..100] of string;
Var s : string;
BEGIN
s:=' Two Ticket to Dublin! Kuda Blin?’+
’ To Dublin..., Cost= 123.00: '; writeln(s);
readln;
END.
Функция удаления знаков препинания с подсчетом числа удалений
//Константа – множество символов, подлежащих
//удалению из строки. Ее надо объявить в разделе
//описаний.
Const ZnakP : set of Char=
['.',',',':',';','?','!','=','-'];
Function DelZnakP(Var s : string) : word;
Var i : word;
Begin Result:=0;
for i:=1 to length(s) do if s[i] in ZnakP then
begin inc(Result); s[i]:=' '; end;
End;
Основная программа
Var s : string; BEGIN
s:=' Two Ticket to Dublin! Kuda Blin? To Dublin..., Cost= 123.00: ';
writeln(s);
writeln('Delete Znak = ', DelZnakP(s)); writeln(s);
readln;
END.

Функция формирования массива слов. Часть 1. Подготовка строки
Function StrToWord(s : string; Var w : Tw) : word; Begin
Result:=0;
//Если строка изначально пустая строка - выход if s='' then Exit;
//Убрать повторяющиеся пробелы
while pos(' ',s) <> 0 do delete(s, pos(' ',s),1);
//Если строка состоит из одного пробела - выход if s=' ' then Exit;
//Убрать первый пробел (если он есть)
if s[1]=' ' then delete(s,1,1);
// Добавить последний пробел (если его нет) if s[length(s)]<>' ' then s:=s+' '; writeln(s); // Отладка
Функция формирования массива слов. Часть 2. Формирование массива.
//Цикл ниже выполняется пока строка не будет
//пустой
while s<>'' do begin
//Нашли очередное слово inc(Result);
//Скопировали его в элемент w[Result]:=copy(s, 1, pos(' ',s)-1);
//Убрали из исходной строки delete(s,1,pos(' ',s));
writeln(w[Result]); // Для отладки end;
End;
