Искать одну строку внутри другой (позицию, начиная с которой подстрока входит в строку): b:=’Я шёл рядом с папой по пути домой’; a:=’дом’; m:=pos(a,b); Хотя слово «дом» есть и в слове «рядом», и в слове «домой», найдено будет только первое вхождение. В переменную m будет занесено число 9. Если функция POS не обнаружила одну строку внутри другой, будет выдан 0. Поэтому в задачах, если нас не интересует, с какой позиции найдена подстрока, а только факт её вхождения, можно проверять так: if pos(a,b)>0 then ...
Var
Строки
Ограниченный (интервальный) тип данных
В некоторых задачах использование порядковых типов данных требуется ограничить. Например, для возраста ученика из типа Integer или Byte используется только промежуток от 3 лет (для вундеркинда) до 20 лет (для второгодника). Если мы вместо стандартного типа введём интервал, то Паскаль будет помогать нам следить за его нарушением (выходом за границы интервала).
или
Интервальный тип можно задать не только на базе числового типа, но и на базе других порядковых типов данных. Например:
Над данными интервального типа можно делать все те же операции, что и над базовым типом, из которого он был создан.
Кроме отдельных символов в программах используют символьные строки. Символьная строка, находящаяся непосредственно в программе, называется строковой константой и заключается в одинарные кавычки (апострофы). Например: ’Жили у бабуси два весёлых гуся’. Длина строки – не более 255 символов. Строковые переменные для хранения символьных строк описываются так:
s:string;
b:string[30];
При первом способе переменной s отводится место для 255 символов. Даже если в переменную s поместили коротенькую строку, всё равно зарезервировано место для 255 символов, из которых бόльшая часть не используется. Второй способ более экономный. Переменной b отводится место для 30 символов. Если попытаемся в b занести более длинную строку, из неё запишутся первые 30 символов, остальные будут потеряны. Попытка использовать строку длиннее, чем 255 символов приводит к сообщению об ошибке «Переполнение строки».
Строки можно присваивать, вводить с клавиатуры. Например:
fam:=’Петров’;
write(’Введите Ваше имя ’); readln(nam);
Над строковыми переменными и константами можно выполнять такие действия:
1. Определять длину строки: dl:=length(a);. Имеется в виду не место, отведённое для строки при объявлении, а сколько в ней на самом деле содержится символов.
2. Склеивать две строки (с помощью знака «+» ). Например, склеив строки a:=’за’; и b:=’мок’;, мы получим c:=a+b; - слово «замок».
3. Выделять из строки один символ (с помощью квадратных скобок). Например, a:=’Семафор’; c:=a[5]; - получим символ ‘ф’.
4. Выделять часть строки (копировать подстроку). Например, s:=’Информатика’; s1:=copy(s,3,5); . В переменную s1 из строки s скопируется 5 символов, начиная с 3-го, то есть, слово «форма».
5. Удалять часть строки: a:=’королева’; delete(a,5,2); . Удалятся 2 символа, начиная с 5-го. Получим в переменной a слово «корова».
6. Вставлять одну строку внутрь другой: a:=’кус’; b:=’акт’; insert(b,a,2);. Получим в переменной a слово «кактус».
8. Если число записано в кавычках, то это не число, а строка, состоящая из символов-цифр. Например, из строки ’Длина удава – 38 попугаев’ можно выделить подстроку ‘38’, но с ней нельзя будет производить вычислений, пока не превратим её в настоящее число. Сделать это можно так: a:=’38’; val(a,x,k);, где x – числовая переменная для результата, а k – переменная для кода ошибки. Если в текстовой строке число записано правильно, то код ошибки будет равен 0. Если неправильно (например, содержит буквы или другие символы, не используемые в числах, или, к примеру, тип этого числа не совпадает с типом переменной x), то k будет содержать число – код ошибки. Для нас важно, что k>0, что легко проверить. Аналогично работают функции x:=strtoint(a); (строку – в целое число) и x:=strtofloat(a); (строку – в дробное число). Они более просты в использовании, но при ошибке, в отличие от val, программа прерывается.
9. Наоборот, если мы вычислили какое-либо число, то его можно преобразовать в строку, чтобы выполнять с ним строковые операции (например, склейку…). Сделать это можно так: x:=3*d+15; str(x,a); s:=’Длина удава ’+a+’ см.’;. Здесь a – строка, полученная из числа x. Некоторое неудобство доставляют дробные (вещественные) числа. Как и при печати эти числа записываются в строку в формате с фиксированной точкой. Чтобы указать другой формат, можно написать так: str(x:5:2,a); . Здесь 5 – точность числа (количество оставляемых значащих цифр. Остальные округляются), а 2 – количество десятичных знаков (после точки). Для этих же целей можно воспользоваться функциями a:=inttostr(x); (целое число – в строку) и a:=floattostr(x); (дробное число – в строку).
10. С помощью функции uppercase(s); можно преобразовать все строчные буквы в строке s в заглавные (на остальные символы эта функция не действует), а с помощью lowercase(s);- заглавные в строчные.
Строки можно сравнивать с помощью знаков ’>’,’>=’,’<’,’<=’,’=’,’<>’. При этом строки сравниваются посимвольно до первого же несовпадающего символа. Бóльшей считается строка, у которой этот несовпадающий символ имеет бóльший код (вне зависимости от того, какие символы в этих строках находятся дальше и сколько их).
В качестве примера использования символов и строк рассмотрим такие задачи:
Определить, сколько раз во введённой строке a содержится введённое слово b.
Определить, каких букв во введённой строке больше, русских заглавных или русских маленьких (строчных).
Во всех задачах со строками, где требуется работать с отдельными словами, считать, что между всеми словами имеется ровно один пробел. Запятую или другой знак, стоящий после слова, считать частью этого слова (переносить или удалять вместе с ним).
1. Во введённой строке удалить в каждом предложении первое слово, а у второго сделать первую букву заглавной.
2. Вводится текст. Программа должна определить, используется ли в тексте только русский шрифт, только латинский или смешанный. Небуквенные символы при проверке игнорировать.
3. «Перекодировать» клавиатуру, т.е., сделать так, чтобы при вводе русского текста показывались не те буквы, которые нажимаются. Ввод заканчивается по «enter». После этого печатается неперекодированная строка.
4. Зашифровать введенную с клавиатуры строку, поменяв местами первый символ с третьим, второй с четвертым и т. д. Провести дешифровку.
5. Перевернуть введённое предложение, поменяв слова местами. Например, было «мама мыла раму», стало «раму мыла мама».
6. Некий человек ввёл текст со старой клавиатуры, на которой некоторые клавиши западают и печатают несколько одинаковых букв подряд. Известно, что в исходном тексте встречались слова, содержащие двойные буквы «с», «н» и «м», как раз те, которые на клавиатуре не западают. Восстановить правильный текст, устранив последствия западания клавиш.
7. Ввести текст и напечатать его, выделив цветом буквосочетания «жи», «ши», «ча», «ща», в которых допущены «ошыбки».
8. Вводится текст, содержащий форматные символы: @ - с красной строки; # - выделить жирным; $ - отменить жирный; & - печатать с разрядкой (после каждого символа вставлять пробел); ^ - отменить разрядку. Напечатать текст в соответствии с форматом.
9. Дан текст и дано слово. Нужно проверить, можно ли из букв текста составить это слово. Буквы из текста запрещается использовать дважды.
10. Найти самое длинное слово во введённом тексте.
11. Найти во введённом тексте слова-палиндромы (симметричные слова, вроде «шалаш»).
12. Найти во введённом тексте слова, встречающиеся 2 и более раза. Указать, сколько раз они встречаются.
13. Ввести два предложения и проверить, все ли слова первого встречаются во втором.
14. Вводится текст и два слова. Программа находит в тексте первое слово (сколько бы раз оно не встретилось) и заменяет его вторым.
15. Ввести два предложения и найти такую (максимально большую) часть первого предложения, которая входит во второе предложение.
16. Введённый текст распечатать столбиком шириной 20 символов. Если в конце строки слово оказывается разорванным, поставить знак переноса «-» (не обращая внимания на правила переноса). Если же с концом строки заканчивается и очередное слово (в том числе и на 1-3 символа раньше конца строки), то новое слово начать печатать с новой строки, пропустив пробел.
17. Во введённом тексте найти все слова, начинающиеся с заглавной буквы и содержащие не менее 2-х гласных букв.
18. Ввести текст и длину строки. За счёт добавления пробелов между словами довести длину текста до заданной. Если длина текста больше, разделить текст на строки нужной длины, чтобы в каждой строке были только целые слова, а затем каждую такую строку подровнять с помощью пробелов до заданной длины.
19. Программа вводит текст и номер слова, а затем удаляет в тексте слово с таким номером, либо сообщает, что слова с таким номером нет в тексте.
20. Во введённом тексте обменять местами первое и последнее предложения.