Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Рядки та засоби їх обробки.

Короткі теоретичні відомості.

Рядки і засоби їх обробки.

Значенням рядкового типу даних є рядки. Стандарт мови передбачає використання рядків тільки як констант, що використовуються в операторах виведення Write, Writeln. У розширенні мови Turbo-Pascal рядковий тип даних визначений більш повно.

Визначення рядкового типу слідує діаграмі:

 

 
 

 


Тут ціле належить діапазону 1..255 і означає максимальну кількість символів у рядку цього типу. Якщо описання типу String використовується без вказівки максимальної кількості символів, це (за замовченням) означає, що під цей тип резервується 255 символів.

 

Наприклад:

Type Name = String[20]; { рядки з 20-ти символів }

Post = String; { рядки з 255-ти символів }

Процедури і функції типу String.

Над рядками визначена операція конкатенації “+”, результат якої - рядок, в якому операнди з’єднанні в порядку їх слідування у виразі. Наприклад:

'Turbo' + 'Pascal' = 'TurboPascal'; 'Turbo_' + 'Pascal ' + 'System' = 'Turbo_Pascal System';

Тому результатом виконання серії операторів

X:= ' Приклад'; У:= ' додавання '; Z:= ' рядків';

Writeln(X + Y + Z); Writeln(Y + ' ' + Z + ' ' + X)

будуть виведені на екран рядки

Прикладдодаваннярядків

додавання рядків Приклад

 

Тип String допускає і пустий рядок - рядок, який не містить символів: EmptyStr:= '' {лапки, що йдуть підряд}. Вона грає роль нуля (нейтрального елемента) операції конкатена­ції: EmptyStr + X = X + EmptyStr = X

Над рядками визначені також відношення (операції логічного типу)

" = ", " <> ", " < ", " > ", " <= ", " >= ".

Таким чином, кожний із рядкових типів упорядкований, причому лексикографічно. Це означає, що

а) порядок на рядках погоджений з порядком, заданим на символьному типі (Char);

б) порівняння двох рядків здійснюється посимвольно, починаючи з перших символів;

в) якщо рядок А є початком рядка В, то А < В;

г) пустий рядок - найменший елемент типу.

 

Наприклад:

 

а) 'с' < 'k', так як Ord(‘c’) < Ord(‘k’);

б) 'abс' < 'abk', так як перші два символи рядків співпадають, а порівняння третіх дає Ord(‘c’) < Ord(‘k’);

в) 'abс' < 'abkd', так як перші два символи рядків співпадають, а порівняння третіх дає Ord(‘c’) < Ord(k);

г) 'ab' < 'abсd', так як рядок 'ab'- початок рядка 'abсd'.

На рядковому типі даних визначені:

 

Функції:

a) Length(X: String): Byte; - довжина рядка X; { Length(EmptyStr) = 0 }

б) Pos(Y:String; X:String):Byte; - позиція першого символу першого зліва входження підрядка Y у рядок X. Якщо X не містить Y, Pos(Y, X) = 0.

в) Copy(X:String; Index, Count: Integer):String - підрядок рядка X, що починається з пози­ції Index і містить Count символів.

г) Concat(X1, X2,.., Xk: String): String; - конкатенація рядків Х1, X2,.., Xk. Інша форма запису суми X1+X2+.. +Xk.

 

Процедури:

д) Delete(var X: String; Index, Count: Integer); З рядка X видаляється Сount символів, починаючи з позиції Index. Результат поміщується в змінну X.

e) Insert(Y:string; var X: String; Index: Integer); В строку X вставляється рядок Y, причому вставка здійснюється починаючи з позиції Index.

Стандартні процедури введення-виведення Паскаля розширені для введення-виведення рядків. Відмітимо, однак, що для введення декількох рядкових даних треба користуватись оператором Readln. Оператор Read у цих випадках може вести себе непередбачено.

 

Приклад 2. Дано масив A[1..n] of string[20]. Скласти програму заміни всіх перших входжень підрядка L в A[i] на підрядок R. Рядки L і R вводяться з клавіатури в виді рівності L = R. Результат замін відобразити у масив, елементи якого - рівності виду:

A[i]=результат заміни L на R в A[i].

Program RewriteArray;

Const n = 100; Single = 20; Double = 41;

Type

Sitem = string[Single]; Ditem = string[Double];

SWordArray = array[1..n] of Sitem; DWordArray = array[1..n] of Ditem;

Var

A: SWordArray; B: DWordArray;

L, R: Sitem; X: Sitem;

i, Index: Integer;

Procedure InpWord(var U, V: Sitem);

Var X: Ditem;

j: Integer;

Begin

Writeln('________ Введення рівності L = R __________');

Read(X); j:= Pos('=', X);

U:= Copy(X, 1, j - 1);

V:= Copy(X, j + 1, Length(X))

End;

 

 

Procedure InpArray;

begin

Writeln('====== Введення масиву слів ======');

For i:=1 to n do Readln(A[i])

end;

Procedure OutArray;

begin

Writeln('====== Виведення масиву слів ====');

For i:=1 to n do Writeln(B[i])

end;

Begin

InpArray; {введення масиву слів з клавіатури}

InpWord(L, R); {введення і аналіз рівності L = R}

For i:= 1 to n do begin

X:= A[i]; Index:= Pos(L, X);

If Index <> 0

then begin

Delete(X, Index, Length(L));

Insert(R, X, Index)

end;

B[i]:= A[i] + '=' + X

end;

OutArray; {виведення масиву слів до друку}

End.

 

 

Хід роботи

1. Виконати свій варіант завдання 1.

2. Записати її як файл в бібліотеку.

3. Відкомпелірувати її і запустити на виконання для кількох значень, щоб перевірити всі описані варіанти значення функції.

4. Записати відкоректовану програму, вихідні данні та результати роботи.

 

Контрольні питання.

  1. Визначити операції над даними рядкового типу.
  2. Визначити функції над даними рядкового типу.

 

Завдання 1.

1. Дана строка символов. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2.

  1. Дана строка символов. Подсчитать общее число входящих в строку символов ‘+’ и ‘-’.
  2. Дана строка символов. Преобразовать строку, заменив в ней все восклицательные знаки точками.
  3. Дана строка символов. Преобразовать строку, заменив каждую точку многоточием (т.е. тремя точками).
  4. Дана строка символов. Преобразовать строку, заменив каждую из групп стоящих рядом точек одной точкой.
  5. Дана строка символов . Выяснить, имеется ли в строке такая пара символов, что - это запятая, а - тире.
  6. Дана строка символов . Получить первое натуральное , для которого каждый из символов и совпадает с буквой . Если такой пары символов нет, то ответом должно быть число 0.
  7. Дана строка символов . Известно, что среди символов есть по крайней мере одна запятая. Найти такое натуральное , что - первая по порядку запятая.
  8. Дана строка символов . Известно, что среди символов есть по крайней мере одна запятая. Найти такое натуральное , что - последняя по порядку запятая.
  9. Дана бесконечная строка символов . Известно, что первый символ отличен от восклицательного знака и что среди остальных символов есть восклицательный знак. Пусть - символы данной строки, предшествующие первому восклицательному знаку. Определить количество пробелов среди символов .
  10. Дана строка символов. Подсчитать сколько раз среди символов строки встречается буква .
  11. Дана строка символов. Преобразовать строку, заменив каждую из групп стоящих рядом точек одной многоточием (т.е. тремя точками).
  12. Дана бесконечная строка символов . Известно, что первый символ отличен от восклицательного знака и что среди остальных символов есть восклицательный знак. Пусть - символы данной строки, предшествующие первому восклицательному знаку ( - заранее неизвестно). Выяснить, входит ли в последовательность буква ‘ю’.
  13. Дана строка символов. Удалить из строки все группы букв вида ‘abcd’.
  14. Дана бесконечная строка символов . Известно, что первый символ отличен от восклицательного знака и что среди остальных символов есть восклицательный знак. Пусть - символы данной строки, предшествующие первому восклицательному знаку ( - заранее неизвестно). Выяснить, имеется ли среди пара соседствующих букв ‘но’ или ‘он’.
  15. Дана строка символов . Преобразовать последовательность , удалив каждый символ ‘*’ и повторив каждый символ, отличный от ‘*’.
  16. Дана строка символов . Среди символов есть двоеточие. Получить все символы, расположенные до первого двоеточия включительно.
  17. Дана строка символов , среди которых есть двоеточие. Получить все символы, расположенные между первым и вторым двоеточием. Если второго двоеточия нет, то получить все символы, расположенные после единственного имеющегося двоеточия.
  18. Дана строка символов . Выяснить, верно ли, что среди символов имеются пять идущих подряд букв ‘е’.
  19. Дана строка символов . Преобразовать символы : если нет символа ‘*’, то оставить строку без изменения, иначе заменить каждый символ, встречающийся после первого вхождения символа ‘*’, на символ ‘-’.

 

Завдання 2

1. Даны две строки: S1 и S2. Проверить, содержится ли строка S2 в строке S1. Если да, то вывести номер позиции, начиная с которой S2 содержится в S1, если нет, то вывести 0.

2. Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1.

3. Дана строка S и символ C. Удвоить каждое вхождение символа C в строку S.

4. Даны строки S1, S2 и символ C. Перед каждым вхождением символа C в строку S1 вставить строку S2.

5. Даны две строки: S1 и S2. Удалить из строки S1 первую подстроку, совпадающую с S2. Если таких подстрок нет, то вывести S1 без изменений.

6. Даны две строки: S1 и S2. Удалить из строки S1 последнюю подстроку, совпадающую с S2. Если таких подстрок нет, то вывести S1 без изменений.

7. Даны две строки: S1 и S2. Удалить из строки S1 все подстроки, совпадающие с S2. Если таких подстрок нет, то вывести S1 без изменений.

8. Даны три строки: S1, S2, S3. Заменить в строке S1 первое вхождение строки S2 на S3.

9. Даны три строки: S1, S2, S3. Заменить в строке S1 последнее вхождение строки S2 на S3.

10. Даны три строки: S1, S2, S3. Заменить в строке S1 все вхождения строки S2 на S3.

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

12. Дана строка. Вывести подстроку, расположенную между первой и последней точками исходной строки. Если в строке менее двух точек, то вывести всю исходную строку.

13. Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы "." (точка).

14. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить количество слов, которые начинаются и заканчиваются одной и той же буквой.

15. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить количество слов, которые содержат хотя бы одну букву "А".

16. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить количество слов, которые содержат ровно три буквы "А".

17. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить длину самого короткого слова.

18. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить длину самого длинного слова.

19. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова (разделенные одним пробелом), но расположенные в алфавитном порядке.

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

 

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...