Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование. Практикум.doc
Скачиваний:
5
Добавлен:
30.04.2019
Размер:
901.63 Кб
Скачать

7. Строки

Цель

Ознакомиться со структурой данных «строка». Изучить основные процедуры и функции для работы со строками. Применить полученные навыки в решении задач.

Теория

Тип STRING (строка) в Паскале используется для удобства работы с массивами символов. Он представляет собой одномерный массив ARRAY[O..N] OF CHAR, причем количество символов в строке-переменной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объявлением типа STRING [N] и может быть любой константой порядкового типа, но не больше 255. Паскаль разрешает не указывать N, в этом случае длина строки принимается максимально возможной, а именно N=255.

Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки, первый значащий символ строки занимает второй байт и имеет индекс 1. Над длиной троки можно осуществлять необходимые действия и таким способом изменять длину. Текущую длину строки, можно получить с помощью функции LENGTH(st)

К строкам можно применять операцию «+» - сцепление, например:

st := 'а1 + 'b';

st := st + 'с'; {st содержит "abc"}

Если длина сцепленной строки превысит максимально допустимую длину N, то «лишние» символы отбрасываются. Следующая программа, например, напечатает символ 1:

var

st: String [1] ;

begin

St:='123';

WriteLn(st)

end.

Все остальные действия над строками и символами реализуются с помощью описываемых ниже стандартных процедур и функций.

CONCAT(S1 [,S2, ... , SN] ) - функция типа STRING; возвращает строку, представляющую собой сцепление строк-параметров SI, S2, ..., SN.

COPY(ST, INDEX, COUNT) - функция типа STRING; копирует из строки ST COUNT символов, начиная с символа с номером INDEX.

DELETE (ST, INDEX, COUNT) - процедура; удаляет СОUNT символов из строки ST, начиная с символа с номером INDEX.

INSERT (SUBST, ST, INDEX) - процедура; вставляет подстроку SUBST в строку ST, начиная с символа с номером INDEX.

LENGTH (ST) - функция типа INTEGER; возвращает длину строки ST.

POS (SUBST, ST) - функция типа INTEGER; отыскивает в строке STпервое вхождение подстроки SUBST и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль.

STR(X [; WIDTH [: DECIMALS] ], ST) - процедура; преобразует число X любого вещественного или целого типов в строку символов ST так, как это делает процедура WRITELN перед выводом; параметры WIDTH и DECIMALS, если они присутствуют, задают формат преобразования: WIDTH определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа X, a DECIMALS - количество символов в дробной части (этот параметр имеет смысл только в том случае, когда Х- вещественное число).

VAL(ST, X, CODE) - процедура; преобразует строку символов ST во внутреннее представление целой или вещественной переменной X, которое определяется типом этой переменной; параметр CODE содержит ноль, если преобразование прошло успешно, и тогда в X помещается результат преобразований, в противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется; в строке ST могут быть ведущие пробелы, однако ведомые пробелы недопустимы; например, обращение val (' 123',k,i) пройдет успешно: k получит значений 123, в i будет помещен 0, в то время как обращение val (' 123 ' , k, i) будет ошибочным: значение k не изменится, a i будет содержать 4.

UPCASE (СН) - функция типа CHAR; возвращает для символьного выражения СН, которое должно представлять собой строчную латинскую букву, соответствующую заглавную букву; если значением СН является любой другой символ (в том числе строчная буква русского алфавита), функция возвращает его без преобразования.

Примеры:

Операции отношения =, о, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением СНR(0) .

Задачи A

1. Дана строка s1, …, sn. Преобразовать строку s1, …, sn, удалив каждый символ * и повторив каждый символ, отличный от *.

2. Даны натуральное число n, строка s1, …, sn. Исключить из строки s1, …, sn группы символов, расположенные между скобками ( ). Сами скобки тоже должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок.

3. Даны натуральное число n, символы s1, …, sn (n > 1). Преобразовать строку s1, …, sn, заменив запятыми все двоеточия, встречающиеся среди

s1, …, s[n/2], и заменив точками все восклицательные знаки, встречающиеся среди s[n/2]+1, …, sn.

4. Даны натуральное число n, строка s1, …, sn. Известно, что среди данных символов есть хотя бы один, отличный от пробела. Требуется преобразовать строку s1, …, sn следующим образом. Удалить группы пробелов, которыми начинается и которыми заканчивается последовательность, а также заменить каждую внутреннюю группу пробелов одним пробелом. Если указанных групп нет в данной последовательности, то оставить последовательность без изменения.

5. Даны натуральное число n, строка s1, …, sn. Подсчитать, сколько раз среди данных символов встречается буква x. (Строковый вариант: дана строка символов; подсчитать, сколько раз среди символов строки встречается буква x.)

6. Даны натуральное число n, строка s1, …, sn. Выяснить, имеются ли в строке s1, …, sn такие члены строки si, si+1, что si - это запятая, a si+1 - тире.

7. Даны натуральное число n, строка s1, …, sn. Получить первое натуральное i, для которого каждый из символов si и si+1 совпадает с буквой а. Если такой пары символов в строке s1, …, sn нет, то ответом должно быть число 0.

8. Даны натуральное число n, строка s1, …, sn. Известно, что среди s1, …, sn есть по крайней мере одна запятая. Найти такое натуральное i, что si - первая по порядку запятая.

9. Даны натуральное число n, строка s1, …, sn. Удалить из данной строки все группы букв вида abcd.

10. Даны натуральное число n, символы s1, …, sn. Подсчитать наибольшее количество идущих подряд пробелов.

11. Даны натуральное число n, строка s1, …, sn. Заменить в строке s1, …, sn каждую группу букв child группой букв children.

12. Даны натуральное число n, символы s1, …, sn. Преобразовать строку

s1, …, sn: если нет символа *, то оставить ее без изменения, иначе заменить каждый символ, встречающийся после первого вхождения символа *, на символ -.

13. Даны натуральное число n, строка s1, …, sn, среди которых есть хотя бы одна точка. Преобразовать строку s1, …, sn, удалив из нее все запятые, предшествующие первой точке, и заменив знаком + все цифры 3, встречающиеся после первой точки.

Задачи B

1. Даны натуральное число n, строка s1, …, sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество слов в данной строке.

2. Даны натуральное число n, строка s1, …, sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество букв а в последнем слове данной строки.

3. Даны натуральное число n, строка s1, …, sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Найти количество слов, начинающихся с буквы б.

4. Даны натуральное число n, строка s1, …, sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Найти количество слов, у которых первый и последний символы совпадают между собой.

5. Даны натуральное число n, строка s1, …, sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Найти какое-нибудь слово, начинающееся с буквы а.

6. Даны натуральное число n, строка s1, …, sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Преобразовать данную последовательность, заменяя всякое вхождение слова это на слово то.

7. Даны натуральное число n, строка s1, …, sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Найти длину самого короткого слова.

8. Даны символы s1, s2, … Известно, что символ s1 отличен от пробела и что среди s2, s3, … имеется хотя бы один пробел. Рассматриваются s1, …, sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать последовательность s1, …, sn, удалив из нее все символы, не являющиеся буквами.

9. Даны символы s1, s2, … Известно, что символ s1 отличен от пробела и что среди s2, s3, … имеется хотя бы один пробел. Рассматриваются s1, …, sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать последовательность s1, …, sn, заменив все малые буквы одноименными большими.

10. Даны символы s1, s2, … Известно, что символ s1 отличен от пробела и что среди s2, s3, … имеется хотя бы один пробел. Рассматриваются s1, …, sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать строку s1, …, sn, удалив все символы, не являющиеся буквами или цифрами, и заменив каждую большую букву одноименной малой.

11. Даны символы s1, s2, … Известно, что символ s1 отличен от пробела и что среди s2, s3, … имеется хотя бы один пробел. Рассматриваются s1, …, sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать строку s1, …, sn, удалив из каждой группы идущих подряд цифр, в которой более двух цифр и которой предшествует точка, все цифры, начиная с третьей (например, ab + 0.1973 - 1.1 преобразуется в ab + 0.19 - 1.1).

12. Даны символы s1, s2, … Известно, что символ s1 отличен от пробела и что среди s2, s3, … имеется хотя бы один пробел. Рассматриваются s1, …, sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать строку s1, …, sn, удалив из каждой группы цифр, которой не предшествует точка, все начальные нули (кроме последнего, если за ним идет точка).