Файл: Практическая работа 16 Тема Программирование строк Цель Развитие навыков и умений использования обработки строковых переменных.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 15

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Практическая работа № 16

Тема : Программирование строк


Цель: 1. Развитие навыков и умений использования обработки строковых переменных

2. Развивать навыки применения языковых конструкций операторов Delphi

3.Углублять навыки работы в среде программирования Delphi.

4.Развивать навыки и приемы управления компонентами среды Delphi

Краткая теоретическая часть



Строка — это последовательность символов.
Для объявления строк используют следующие типы:

Shortstring длина от 1 до 255 символов

String(Ansistring) бесконечная, но ограничена размером 2Гб, в кодировке ANSI кода

WideString бесконечная, но ограничена размером 2Гб, в кодировке UniCode

Фрагмент таблицы символьной кодировки ASCII

Код

ACSII символ




Код

ACSII символ




Код

ACSII символ

65

A




128

А




224

р

66

B




129

Б




225

с

67

C




130

В




226

т

68

D




131

Г




227

у



















88

X




157

Э




237

э

89

Y




158

Ю




238

ю

90

Z




159

Я




239

я

97

a




160

а




240

Ё

98

b




161

б




241

ё

99

c




162

в




255

пробел

100

d




163

г




48

0



….











49

1

120

x




173

н




..



121

y




174

о




57

9

122

z




175

п




13






Форматы кодирования символов



Существуют различные форматы кодирования символов. Отдельный символ строки может быть представлен в памяти одним байтом (стандарт Ansi), двумя байтам (стандарт Unicode) и даже четырьмя байтами (стандарт UCS-4 — Unicode). Строка “Wirth” (фамилия автора языка Pascal — прародителя языка Delphi) будет представлена в указанных форматах следующим образом (рисунок 1):


Рисунок 1. Форматы кодирования символов
Функции и процедуры для работы со строками
Стандартно подключаемый модуль System имеет набор процедур и функций, значительно облегчающих этот процесс. Все следующие процедуры и функции применимы и к коротким, и к длинным строкам.

  • Concat(S1, S2, ... , Sn): string — возвращает строку, полученную в результате сцепления строк S1, S2, ..., Sn. По своей работе функция Concat аналогична операции сцепления (+).

  • Copy(S: string, Index, Count: Integer): string — выделяет из строки S подстроку длиной Count символов, начиная с позиции Index.

  • Delete(var S: string, Index, Count: Integer) — удаляет Count символов из строки S, начиная с позиции Index.

  • Insert(Source: string; var S: string, Index: Integer) — вставляет строку Source в строку S, начиная с позиции Index.

  • Length(S: string): Integer — возвращает реальную длину строки S в символах.

  • SetLength(var S: string; NewLength: Integer) — устанавливает для строки S новую длину NewLength.

  • Pos(Substr, S: string): Byte — обнаруживает первое появление подстроки Substr в строке S. Возвращает номер той позиции, где находится первый символ подстроки Substr. Если в S подстроки Substr не найдено, результат равен 0.

  • Str(X [: Width [: Decimals] ], var S: string) — преобразует числовое значение величины X в строку S. Необязательные параметры Width и Decimals являются целочисленными выражениями. Значение Width задает ширину поля результирующей строки. Значение Decimals используется с вещественными числами и задает количество символов в дробной части.

  • Val(S: string, var V; var Code: Integer) — преобразует строку S в величину целого или вещественного типа и помещает результат в переменную V. Если во время операции преобразования ошибки не обнаружено, значение переменной Code равно нулю; если ошибка обнаружена (строка содержит недопустимые символы), Code содержит номер позиции первого ошибочного символа, а значение V не определено.



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

  • AnsiCompareStr(const S1, S2: string): Integer — сравнивает две строки, делая различие между заглавными и строчными буквами; учитывает местный язык. Возвращаемое значение меньше нуля, если S1 < S2, равно нулю, если S1 = S2, и больше нуля, если S1 > S2.

  • AnsiCompareText(const S1, S2: string): Integer — сравнивает две строки, не делая различий между заглавными и строчными буквами; учитывает местный язык. Возвращаемое значение меньше нуля, если S1 < S2, равно нулю, если S1 = S2, и больше нуля, если S1 > S2.

  • AnsiLowerCase(const S: string): string — преобразует заглавные буквы строки S к строчным буквам с учетом местного языка.

  • AnsiSameStr(const S1, S2: string): Boolean — сравнивает строки, делая различие между строчными и заглавными буквами; учитывает местный язык.

  • AnsiSameText(const S1, S2: string): Boolean — сравнивает строки, не делая различие между строчными и заглавными буквами; учитывает местный язык.

  • AnsiUpperCase(const S: string): string — преобразует все строчные буквы в заглавные; учитывает местный язык.

  • IsDelimiter(const Delimiters, S: string; Index: Integer): Boolean — проверяет, является ли символ S[Index] одним из символов строки Delimiters. Функция поддерживает работу с многобайтовой MBCS-кодировкой.

  • LastDelimiter(const Delimiters, S: string): Integer — возвращает индекс последнего вхождения одного из символов строки Delimiters в строку S.

  • LowerCase(const S: string): string — преобразует все заглавные буквы строки S к строчным; не учитывает местный язык (в преобразовании участвуют лишь символы в диапазоне от 'A' до 'Z').

  • SameText(const S1, S2: string): Boolean — сравнивает строки, не делая различие между строчными и заглавными буквами; учитывает местный язык.

  • SetString(var S: string; Buffer: PChar; Len: Integer) — копирует строку с типом PChar в строку с типом string. Длина копируемой строки задается параметром Len.

  • StringOfChar(Ch: Char; Count: Integer): string — возвращает строку, в которой повторяется один и тот же символ. Количество повторений задается параметром Count.

  • Trim(const S: string): string — возвращает часть строки S без лидирующих и завершающих пробелов и управляющих символов.

  • TrimLeft(const S: string): string — возвращает часть строки S без лидирующих пробелов и управляющих символов.

  • TrimRight(const S: string): string — возвращает часть строки S без завершающих пробелов и управляющих символов.

  • UpperCase(const S: string): string — преобразует все строчные буквы строки S в заглавные; не учитывает местный язык (в преобразовании участвуют лишь символы в диапазоне от 'a' до 'z').

  • WrapText(const Line: string; MaxCol: Integer = 45): string — разбивает текст Line на строки, вставляя символы переноса строки. Максимальная длина отдельной строки задается параметром MaxCol.

  • WrapText(const Line, BreakStr: string; const BreakChars: TSysCharSet; MaxCol: Integer): string — более мощный аналог предыдущей функции — разбивает текст Line на строки, вставляя символы переноса строки.



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

  • AnsiIndexStr – возвращает номер указанной строки в массиве строк (регистр символов учитывается)

  • AnsiIndexText – возвращает номер указанной строки в массиве строк (регистр символов не учитывается)

  • AnsiReplaseStr заменяет все вхождения указанной подстроки другой подстрокой (регистр символов учитывается)

  • AnsiReplaseText заменяет все вхождения указанной подстроки другой подстрокой (регистр символов не учитывается)

  • DupeString возвращает строку, состоящую из указанной подстроки, повторенной заданное количество раз

  • LeftStr - возвращает подстроку заданной длины, расположенную в начале строки

  • MidStr возвращает подстроку заданной длины, начиная с указанной позиции в строке;

  • ReverseString –возвращает перевернутую строку

  • RightStr возвращает подстроку заданной длины, расположенную в конце строки

  • StuffString вставляет подстроку в заданную позицию строки , заменяя соответствующие символы;



Подпрограммы для работы с порядковыми величинами

Chr(X) Возвращает символ, порядковый номер которого равен X.

Dec(X, [N]) Уменьшает целую переменную X на 1 или на заданное число N.

Inc(X, [N]) Увеличивает целую переменную X на 1 или на заданное число N.

Ord(X) Возвращает порядковый номер аргумента X в своем диапазоне значений.

Pred(X) Возвращает значение, предшествующее значению аргумента X в своем диапазоне.

Succ(X) Возвращает значение, следующее за значением аргумента X в своем диапазоне.
Примеры:

Выражение

Результат

Chr(65)

'A'

Odd(3)

True

Ord('A')

65

Pred('B')

'A'

Succ('A')

'B'



Задание
Разработать интерфейс и программу, которая преобразует исходный текст в заданный в соответствии с заданием варианта. Для ввода и вывода текста можно использовать компонент Memo или Edit
Вариант 1

Дано предложение. Найти количество слов, начинающихся с указанной буквы.

Вариант 2

Дано предложение. Преобразовать ее, удалив каждый символ «*».
Вариант 3

Дано предложение. Подсчитать количество букв k в последнем ее слове.
Вариант 4

Дано предложение . В строке между словами вставить вместо пробела запятую и пробел.
Вариант 5

Дано предложение . Определить, сколько раз в строке встречается заданное слово.
Вариант 6

Дано предложение. Преобразовать строку, удалив в ней повторяющиеся пробелы, то есть сделать так, чтобы в результате в строке между словами было не более одного пробела
Вариант 7

Дано предложение. Найти количество гласных букв в последнем слове. Вывести последнее слово
Вариант 8

Дано предложение. Найти в строке число слов, длина которых равна указанному пользователем числу символов.
Вариант 9

Дано предложение. Вывести на экран длины всех слов строки.
Вариант 10

Дано предложение. Определить средне-арифметическую длину слов строки.

Содержание отчета


  1. Тема

  2. Цель

  3. Код программы (без формы)



Контрольные вопросы


  1. Типы строковых переменных. Их отличия и сходства.

  2. Основные функции для работы со строками.

  3. Основные процедуры для работы со строками.

  4. Какие модули можно подключать для расширения функций обработки строк. Где происходит подключение.

  5. Как происходит кодирование символов. Какие виды кодов существуют. Как определить код символа, и наоборот, по коду определить символ.