Задания для самостоятельной работы

ЛАБОРАТОРНАЯ РАБОТА №5

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

 

Цель и задача работы: изучить приёмы использования функций и процедур обработки строк.

Строки

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

Строка в Турбо Паскале трактуется как цепочка символов. К любому символу можно обратиться точно так же, как к элементу одномерного массива array [0..n] of char, например:

var

st: string;

... ...

if st[5]=’A’ then ...

 

Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает второй байт и имеет индекс 1. Над длиной строки можно осуществлять необходимые действия и таким образом менять её длину. Например, можно принудительно установить длину строки:

st[0] := chr(15);

 

Переменная типа String[n] указывает в памяти на одномерный массив из n+1 байт, расположенных в памяти компьютера друг за другом. В первом байте (байте с нулевым смещением) указывается количество значащих символов строки (от 0 до 255). Все остальные байты содержат значения, которые при работе со строкой интерпретируются как ASCII-коды соответствующих символов (рис. 3).

Рис. 3. Тип string в памяти компьютера и на экране

При выводе на экран будут отображено столько первых символов, сколько указано в байте с нулевым смещением. Остальные символы на экран выведены не будут.

Для работы с ASCII-кодами символов используются функции:

CHR(Code: byte): char, которая возвращает символ заданного кода Code, например, st[5] := chr(65) {st[5] := ‘A’};

ORD(Ch: Char): byte, которая возвращает код заданного символа Ch, например a := ord('0') {a := 48}.

Текущую длину строки, значение ORD(st[0]) можно получить с помощью функции LENGTH(st).

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

st := ’a’+’b’;

st := st+’c’;

 

В Турбо Паскале имеется ряд встроенных процедур и функций для работы со строками:

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

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

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

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

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

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

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

VAL(ST, X, CODE)– процедура; преобразует строку символов ST во внутреннее представление целой или вещественной переменной Х. Параметр CODE типа INTEGER содержит ноль, если преобразование прошло успешно, и тогда в X помещается результат преобразования, в противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется; ведущие пробелы в строке ST должны отсутствовать.

Пример.

Удаление повторяющихся пробелов из строки символов.

var

st: string;

 

begin

...

while Pos(‘ ‘, st)>0 do

Delete(st, Pos(‘ ‘, st), 1 );

...

end.

 

Таблица АSCII-кодов

33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 )
42 * 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3
52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 =
62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G
72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q
82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [
92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e
102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o
112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y
122 z 123 { 124 | 125 } 126 ~ 127  128 А 129 Б 130 В 131 Г
132 Д 133 Е 134 Ж 135 З 136 И 137 Й 138 К 139 Л 140 М 141 Н
142 О 143 П 144 Р 145 С 146 Т 147 У 148 Ф 149 Х 150 Ц 151 Ч
152 Ш 153 Щ 154 Ъ 155 Ы 156 Ь 157 Э 158 Ю 159 Я 160 а 161 б
162 в 163 г 164 д 165 е 166 ж 167 з 168 и 169 й 170 к 171 л
172 м 173 н 174 о 175 п
224 р 225 с 226 т 227 у 228 ф 229 х 230 ц 231 ч
232 ш 233 щ 234 ъ 235 ы 236 ь 237 э 238 ю 239 я 240 Ё 241 ё

 

Задания для самостоятельной работы

Разработать программу на Турбо Паскале, которая обеспечивает решение поставленной задачи в соответствии с предложенным вариантом. Первая цифра - номер задания, вторая - номер варианта.

1. Выполнить преобразование введённой пользователем строки по указанному алгоритму.

1.1. Все символы заглавных букв латинского алфавита утраиваются.

1.2. Первый символ копируется один раз, второй – дублируется, третий – утраивается, четвёртый – копируется четыре раза, пятый – копируется пять раз, шестой – один раз, седьмой – два раза и т.д.

1.3. Все прописные буквы латинского алфавита заменяются строчными буквами. Остальные символы копируются.

1.4. Все символы «пробел» удаляются из исходной строки, остальные символы – копируются.

1.5. Все символы цифр от нуля до девяти утраиваются, остальные – копируются один раз.

1.6. Каждый третий символ строки удваивается, остальные – копируются один раз.

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

1.8. Все символы цифр от нуля до девяти удаляются из строки, остальные – копируются один раз.

1.9. Первый символ копируется четыре раза, второй – три раза, третий – два раза, четвёртый – один раз, пятый – четыре раза, шестой – три раза, седьмой – два раза и т.д.

1.10. Каждый четвёртый символ строки копируется четыре раза, остальные – копируются один раз.

1.11.

2. Выполнить преобразование введённой пользователем строки по указанному алгоритму. Словом считается последовательность символов между пробелами.

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

2.2. Сформировать строку, состоящую из последних трех символов каждого слова исходной строки.

2.3. Сформировать строку, состоящую из всех слов исходной строки, длина которых больше пяти символов.

2.4. Сформировать строку, состоящую из всех слов исходной строки, длина которых меньше восьми символов.

2.5. В исходной строке найти и вывести на экран самое длинное и самое короткое слово.

2.6. Сформировать строку, в которой поменяны местами первое и последнее слова исходной строки.

2.7. Сформировать строку, в которой первый символ каждого слова исходной строки заменён номером слова в строке.

2.8. Сформировать строку, в которую из исходной строки копировать только те слова, которые не содержат заглавных латинских букв.

2.9. Формировать строку-результат из тех слов исходной строки, в которых встречаются символы прописных латинских букв.

2.10. Сформировать строку, путем копирования слова с заданным номером исходной строки в начало.