Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛАБА_Строки. Тип варианта

.doc
Скачиваний:
4
Добавлен:
01.04.2016
Размер:
50.18 Кб
Скачать

Лабораторная работа №21.

Строки. Тип варианта.

  1. В Delphi произошли серьезные изменения в работе со строками. Переменная стандартного строкового типа String или ANSIString может содержать до 2Гбайт символов

Переменная типа ANSIString на самом деле указатель. Когда строка пустая, то переменная равна nil. Когда переменная содержит непустую строку, она указывает на автоматически выделяемый блок памяти из кучи, содержащий символы строки, длину строки (4 байта) и счетчик ссылок на эту строку(4 байта).

Когда переменная типа ANSIString уничтожается (ей присваивается NIL) или ей присваивается другое значение, то счетчик ссылок для старого значения уменьшается на 1, для нового – увеличивается. Если счетчик ссылок становится равным нулю, то память освобождается и значение строки стирается.

Если мы меняем значение некоторых символов в строке, то создается новая строка с измененным значением, и переменная указывает именно на нее.

Для обработки строк по прежнему можно использовать функцию length, возвращающую длину строки, обращаться к элементам строки по адресу. Также действуют процедуры Copy, Insert,Delete, Pos. Рассмотрим новые процедуры и функции, описанные в модуле SysUtils

procedure SetLength(var S; NewLength: Integer);

Процедура SetLength устанавливает новую длину строки, при этом заново выделяется память и счетчик ссылок становится равным 1.

Function AnsiCompareStr(const S1,S2: string): integer; - сравнение двух строк с учетом регистра. Возвращает положительное число, если S1>S2, ноль – если S1=S2, отрицательное число – если S1<S2

Function AnsiCompareText(const S1,S2: string): integer; - сравнение без учета регистра.

Function AnsiPos( Substr,S: string):integer – возвращает позицию подстроки Substr в S, если подстрока не найдена – возвращает ноль.

Function AnsiUpperCase(S:String):string – преобразов. строку в верхний регистр.

Function AnsiLowerCase(S:String):string – преобразов. строку в нижний регистр.

Function AnsiSameStr(const S1,s2: string):boolean – проверяет строки на полное совпадение

Function AnsiSameText(const S1,s2: string):boolean – проверяет строки на полное совпадение без учета регистра.

Procedure SetString(var S:String; St:Pchar; Len:Integer) – копирует первые Len символов из St в S.

Fuinction StringofChar(C:Char; Count: integer):Stringвозвращает строку, содержащую Сount раз повторенный символ С.

Function StringReplace(S, old, New: String; Flags: TreplaceFlags):String

Заменяет в S подстроку Оld на подстроку New. Flags – множество, которое может содержать значения rfReplaceAll – означает, что будут заменены все вхождения подстроки и rfIgnoreCase – означает поиск без учета регистра.

TreplaceFlags =Set of( rfReplaceAll, rfIgnoreCase);

Function Trim(s:string):string -удаляет из строки все лидирующие и завершающие пробелы.

Function TrimLeft(s:string):string -удаляет из строки все лидирующие пробелы.

Function TrimRight(s:string):string -удаляет из строки все завершающие пробелы.

Преобразования чисел и строк

Function StrtoInt(S:String): integer; – преобразует строку в целое число,

Function StrtoInt64(S:String): int64; – преобразует строку в 64-битное целое число,

Function StrtoIntDef(S:String;Default: integer):integer – если недопустимое значение, то возвращает Default

Function IntToStr(A:integer):string – обратное преобразование целого числа в строку.

Function StrToFloat(S:String):extended; – преобразование строки в действительное число.

Function FloatToStr(F:Extended):String; - преобразование действительного числа в строку.

Для ввода и вывода строк можно использовать специальные функции и процедуры, описанные в модуле Dialogs. Каждая подпрограмма открывает специальное окно для ввода и вывода.

Function InputBox( const Caption, Prompt, Default: String): String; Отображает окно диалога с однострочным полем ввода и двумя кнопками – ОК и Отмена. Caption определяет заголовок окна, Prompt – текст над полем ввода, Default – значение по умолчанию, первоначально показываемое в поле ввода.

Если пользователь щелкнул на кнопке ОК, то возвращается значение из поля ввода, если на кнопке Cancel – возвращается значение, указанное параметром Default.

Function InputQuery( const Caption, Prompt: String; Var Value:String): Boolean; Отображает окно диалога с однострочным полем ввода и двумя кнопками – ОК и Отмена. Caption определяет заголовок окна, Prompt – текст над полем ввода, Value – значение, отображаемое и редактируемое в поле ввода. Если пользователь щелкнул на кнопке ОК, то возвращается значение True, если на кнопке Cancel – возвращается значение False.

Functon MessageDlg (const Msg: string; DlgType: TmsgDlgType; Buttons: TmsgDlgButtons; HelpCtx:Longint):Word;

Отображает диалог типа DlgType c сообщением, указываемым параметром Msg и кнопками Buttons. HelpCtx – номер страницы в файле справки (может быть равен 0, если справки нет).

Параметр DlgType определяет типы диалогов: mtError, mtConfirmation, mtWarning,mtInformation, mtCustom.

Buttons – множество, которое содержит значения: mbYes, mbNo, mbOk, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp, mbYesNoCancel, mbOkCancel,mbAbortRetryIgnore. Для того, чтобы указать несколько кнопок надо использовать операцию + или перечислить их через запятую в квадратных скобках

MbOk+mbHelp или [mbOk,mbHelp]

Функция возвращает одно из следующих значений, определяющих выбранную кнопку – mrNone, mrYes, mrAbort, mrOk, mrRetry, mrCancel, mrNo, mrIgnore, mrAll.

Procedure ShowMessage( msg: string);

Отображает диалог с сообщением MSG и кнопкой ОК. В заголовке будет выведено имя программы.

  1. Тип варианта используется в том случае, когда тип переменной заранее неизвестен – например для обмена между программами.

Описывается с помощью стандартного имени Variant. Использование этого типа чревато ошибками, поэтому надо применять только там, где нельзя обойтись.

Переменные типа Variant не могут хранить записи, статические массивы, файлы, классы, указатели и значения Int64

Var V:Variant;

V:=1;

V:=2.3

V:=’строка’

В качеcтве разделителя используется символ, установленный в Windows(для русской версии – запятая).

Происходит автоматическое преобразование типа – числа в строку и обратно, числа в логическое значение и т.д.

Тип аргумента можно узнать с помощью функции VarType. Она возвращает значение из набора предопределенных констант

function VarType(const V: Variant): Integer;

Значения функции:

varEmpty Вариант пустой; VarSmallint Smallint; varInteger Integer;

varSingle Single; varDouble Double; varCurrency Currency

varDate TdateTime; varOLEStr WideString; varError Код ошибки;

varBoolean Boolean; varUnknown Неизвестный объект; varByte Byte

varString AnsiString

function VarAsType(const V: Variant; VarType: Integer): Variant; - преобразование типа переменной варианта.

function VarToStr(const V: Variant): string; Преобразование перменной типа варианта в строку.

Задания.

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

  2. Написать функцию, параметром которой является произвольный массив значений типа Variant (array of const), подсчитывающую сумму чисел в этом массиве.

2