Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
41
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

 

 

Глава 44

 

 

 

Строки

 

 

 

 

 

 

c:= UpCase(’R’);

{ ’R’ }

 

 

c:= UpCase(’8’);

{ ’8’ }

 

 

c:= UpCase(’ы’);

{ ’ы’ }

 

 

 

 

 

Функцией UpСase обычно приводят введенные строки к определенному виду. Ведь пользователь может ввести данные как заглавными, так и строчными буквами, а это иногда мешает правильной обработке строки.

Ознакомившись со строковой теорией, применим её, что называется, «в бою».

Подсчет слов в строке

Вот вам строка, посчитайте в ней количество слов «Pascal». Чуть подумав, вы остановитесь на функции Pos, — ведь она возвращает позицию искомого слова. Но функция обнаруживает лишь первое вхождение фрагмента, а как быть с остальными? Я предлагаю постепенно разрушать исходную строку. То есть, найдя искомый фрагмент, будем удалять его из строки и снова повторять поиск. На этом и построена программа P_44_2.

{ P_44_2 - Подсчет слов «PASCAL» в строке } var S : string; { исходная строка }

p : integer; { позиция в строке } c : integer; { счетчик слов }

begin

S:='Лучший язык программирования – это PASCAL!'+

'Изучите PASCAL! PASCAL не подведет!';

c:=0;

 

repeat

 

p:= Pos('PASCAL', S);

{ ищем слово «PASCAL» }

if p>0 then begin

{ если нашли }

Inc(c);

{ то наращиваем счетчик }

{ и удаляем это слово из строки } Delete(S, p, Length('PASCAL'));

end

until p=0; { выход, если слов «PASCAL» больше нет } Writeln('Найдено слов PASCAL: ',c); Readln;

end.

Контекстная замена

Любой текстовый редактор умеет заменять одну подстроку на другую, — это называется контекстной заменой. Устроим такую замену в строковой переменной. Итак, дана строка, содержащая несколько слов «Pascal». Заменим все вхождения слова «Pascal» словом «Паскаль» (чем не англо-русский переводчик?).

337

Глава 44

Строки

Разобравшись с предыдущей задачей, вы легко одолеете и эту. Для проверки вашего решения сравните его с моим (P_44_3).

{ P_44_3 - Замена слов «Pascal» на «Паскаль» } var S : string; { исходная строка }

p : integer; { позиция в строке }

begin

S:='Лучший язык программирования – Pascal! '+

'Изучите Pascal! Pascal не подведет!';

Writeln(S); { исходная строка }

repeat

 

p:= Pos('Pascal', S);

{ ищем слово 'Pascal' }

if p>0 then begin

{ если нашли }

{удаляем это слово из строки } Delete(S, p, Length('Pascal'));

{и вставляем в этом месте слово 'Паскаль'} Insert('Паскаль', S, p);

end

until p=0; { выход, если слов 'Pascal' больше нет } Writeln(S); { строка результата }

Readln;

end.

Итоги

Строка родственна массиву символов. Дополнительный нулевой элемент этого массива содержит длину строки.

Строка, объявленная без указания размера, по умолчанию занимает 256 байтов памяти и может содержать до 255 символов.

Для экономии памяти используют строки меньшего размера. При объявлении таких строк размер указывают внутри квадратных скобок после слова STRING.

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

Аслабо?

А) Напишите процедуру, переводящую все символы строки (латинские буквы) к верхнему регистру.

Б) Напишите функцию для приведения любой буквы к верхнему регистру (включая и русские). Подсказка: вспомните о таблице кодировки.

338

Глава 44

Строки

В) Напишите функцию для приведения любой буквы к нижнему регистру.

Г) Напишите собственные процедуры и функции обработки строк, повторяющие те, что встроены в Паскаль. Дайте им названия, похожие на стандартные, например: MyCopy, MyDelete и так далее.

Д) Вращение строки вправо. Напишите процедуру, перемещающую 1-й символ строки на место 2-го, 2-й — на место 3-го и т.д. Последний символ должен занять 1-е место. Примените средства обработки строк.

Е) Вращение строки влево. Напишите процедуру для перемещения 2-го символа на место 1-го, 3-го — на место 2-го и т.д. Первый символ должен стать последним.

Ж) Строка содержит несколько слов — предложение. Напишите программы для решения следующих задач.

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

Определить количество слов в строке.

Равномерно расставить пробелы между словами так, чтобы удлинить строку до 80 символов (исходная строка короче 80).

З) Напишите булеву функцию, определяющую, является ли строка (параметр) палиндромом. Палиндром читается одинаково в обоих направлениях.

И) Напишите булеву функцию, определяющую, можно ли из букв первого слова составить второе (например, «клавиша» и «вилка» — TRUE). Учитывается только набор букв, а не их количество. Подсказка: примените множества.

К) Дана строка, содержащая не менее трёх символов. Найти в ней три стоящих подряд символа, дающих максимальную сумму своих кодов.

Л) В строке найти возрастающую последовательность символов наибольшей длины (сравнивайте коды символов).

М) Напишите булеву функцию, проверяющую, следуют ли символы строки по неубыванию своих кодов.

Н) Напишите функцию для шифрования строки путём перестановки её символов, расположенных на нечётных позициях: первый символ обменивается с последним, третий — с третьим от конца и т.д.

339

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в папке delphi