Песни о Паскале
Шрифт:
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» словом «Паскаль» (чем не англо-русский переводчик?).
Разобравшись с предыдущей задачей, вы легко одолеете и эту. Для проверки вашего решения сравните его с моим («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; {
Writeln(S); { строка результата }
Readln;
end.
Итоги
• Строка родственна массиву символов. Дополнительный нулевой элемент этого массива содержит длину строки.
• Строка, объявленная без указания размера, по умолчанию занимает 256 байтов памяти и может содержать до 255 символов.
• Для экономии памяти используют строки меньшего размера. При объявлении таких строк размер указывают внутри квадратных скобок после слова STRING.
• В Паскале предусмотрен ряд встроенных процедур и функций, облегчающих обработку строк.
А слабо?
А) Напишите процедуру, переводящую все символы строки (латинские буквы) к верхнему регистру.
Б) Напишите функцию для приведения любой буквы к верхнему регистру (включая и русские). Подсказка: вспомните о таблице кодировки.
В) Напишите функцию для приведения любой буквы к нижнему регистру.
Г) Напишите собственные процедуры и функции обработки строк, повторяющие те, что встроены в Паскаль. Дайте им названия, похожие на стандартные, например: MyCopy, MyDelete и так далее.
Д) Вращение строки вправо. Напишите процедуру, перемещающую 1-й символ строки на место 2-го, 2-й – на место 3-го и т.д. Последний символ должен занять 1-е место. Примените средства обработки строк.
Е) Вращение строки влево. Напишите процедуру для перемещения 2-го символа на место 1-го, 3-го – на место 2-го и т.д. Первый символ должен стать последним.
Ж) Строка содержит несколько слов – предложение. Напишите программы для решения следующих задач.
• Напечатать в столбик отдельные слова введённого предложения.
• Определить количество слов в строке.
• Равномерно расставить пробелы между словами так, чтобы удлинить строку до 80 символов (исходная строка короче 80).
З) Напишите булеву функцию, определяющую, является ли строка (параметр) палиндромом. Палиндром читается одинаково в обоих направлениях.
И) Напишите булеву функцию, определяющую, можно ли из букв первого слова составить второе (например, «клавиша» и «вилка» – TRUE). Учитывается только набор букв, а не их количество. Подсказка: примените множества.
К) Дана строка, содержащая не менее трёх символов. Найти в ней три стоящих подряд символа, дающих максимальную сумму своих кодов.