Программирование в системе Delphi с помощью строк
Целью данного раздела является изучение разновидностей строк, получения навыков описания, ввода, вывода и обработки строк.
Типы строк
Для обработки текстов в Object Pascal используются следующие типы:
– короткая строка ShortString или String [N], где N <= 255;
– длинная строка String или AnsiString;
– широкая строка WideString;
– нуль-терминальная строка PChar.
Общим для этих типов является то, что каждая строка трактуется как одномерный массив символов, количество символов в котором может меняться в работающей программе: для ShortString – от 0 до 255; для String [N] длина строки меняется от 0 до N; для String, WideString и PChar − от 0 до 2 Гбайт.
Тип String имеет разный смысл в зависимости от директивы компилятора $H. Если включена директива {$H+} (она включена по умолчанию), то String интерпретируется компилятором как тип AnsiString − длинная строка. Если же включить директиву {$H-}, то String интерпретируется компилятором как тип ShortString − короткая строка.
Если в объявлении типа после ключевого слова String следует число символов в квадратных скобках (например, String [4]), то, независимо от директив компилятора, тип трактуется как короткая строка с указанным числом символов.
Для объявления короткой строки максимальной длины может использоваться стандартный тип ShortString (эквивалентно String [255]).
При объявлении короткой строки компилятор выделяет для ее размещения на один байт больше (добавляется нулевой байт) и помещает в нулевой байт текущую длину строки.
В коротких и длинных строках используются однобайтовые символы ANSI. Однобайтный символ связан с одним из 256 возможных значений, которые трактуются в зависимости от установленной в Windows национальной страницы. 256 символов вполне достаточно для отображения национального алфавита любого европейского языка.
В Delphi введены также широкие строки, объявляемые стандартным типом WideString. По своим свойствам они идентичны длинным строкам String, но отличаются от них тем, что для представления каждого символа используются не один, а два байта.
Для отображения алфавита некоторых азиатских языков 256 символов недостаточно. В этом случае используются двухбайтные символы кода Unicode, в котором младший байт обычно кодируется семибитным ANSI – кодом, а старший указывает, как должен трактоваться этот код. Символ Unicode в памяти занимает одно двухбайтовое слово, которое имеет 65536 возможных значений. С помощью этого кода можно представить все символы всех языков мира. Двухбайтные символы Unicode объявляются стандартным типом WideChar, а составленные из них строки – типом WideString.
Короткие, длинные и широкие строки нумеруются с 1.
Нуль-терминальные строки представляют собой цепочки символов, ограниченные символом #0. Максимальная длина такой строки лимитируется только доступной памятью и может быть очень большой. Нуль-терминальные строки нумеруются с 0. В нуль-терминальных строках используются однобайтовые символы ANSI. Необходимость в нуль-терминальных строках возникает при прямом обращении к АРI -функциям ОС. При работе с компонентами Delphi в основном используются более удобные длинные строки.
Примеры объявлений строковых типов:
var
swS:WideString; // широкая строка
pcS: PChar; // нуль-терминальная строка
acS: array [0..1000] of Char; // строка длиной до 1000 символов
ssS: String [250]; // короткая строка длиной до 250 символов
ssMax: ShortString; // короткая строка длиной до 255 символов
stS: String; //длинная строка
При объявлении длинной строки stS компилятор выделит для переменной 4 байта, достаточные для размещения адреса той ячейки памяти, начиная с которой будет фактически располагаться символьная строка. Говорят, что stS ссылается на строку. Такого рода переменные-ссылки называются указателями.
При объявлении переменной pcS типа PChar компилятор считает эту переменную указателем и выделит для нее 4 байта.
Операции над строками
К строкам можно применять операцию «+» − конкатенации (сцепление или объединение) строк. Например:
stS:= ‘a’ +’b’; // stS содержит "ab"
stS:= stS + ‘c’; // stS содержит "abc"
Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо, с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы более короткой строки заменяются значением Chr (0). Функция Chr (0) преобразует целочисленный аргумент к эквивалентному символу в соответствии с кодовой таблицей. Функция Chr (0) и #0обозначают один и тот же символ. Результаты операций отношения приведены ниже (табл.9.1).
Таблица 9.1
Операции отношения со строками
Значение S
| Значение S1
| S>S1
| S>=S1
| S<S1
| S<=S1
| S=S1
| S<>S1
| ‘abc’
| ‘abc’
| false
| true
| false
| true
| true
| false
| ‘abcd’
| ‘abc’
| true
| true
| false
| false
| false
| true
| ‘bac’
| ‘abc’
| true
| true
| false
| false
| false
| true
| Текущую длину строки можно получить с помощью функции Length. Со строками можно работать как с одномерными символьными массивами:
n:=0;
for k:=1 to Length(s) do
if s[k] in [0..9] then n:=n+1;
В данном примере осуществляется подсчет количества символов цифр в строке. Операция in проверяет принадлежность символа строки s[k] множеству целых чисел [0..9].
В следующем примере уничтожаются все ведомые (хвостовые) пробелы в длинной строке stS:
while (Length(stS) <> 0) and (stS [Length(stS)] = ’ ‘) do
SetLength (stS, Length (stS) –1);
Стандартная процедура SetLength устанавливает новую длину строки stS.
Многострочные окна редактирования Memo и RichEdit
Компоненты Memo и RichEdit являются окнами редактирования многострочного текста. Они так же, как и компонента Edit, снабжены многими функциями, свойственными большинству редакторов. При редактировании текста можно использовать «горячие» клавиши:
1) Ctrl-C – копирование выделенного текста в буфер обмена;
2) Ctrl-X – вырезание выделенного текста в буфер обмена;
3) Ctrl-V – вставка текста из буфера обмена;
4) Ctrl-Z – отмена последней команды редактирования.
В компоненте Memo текст выравнивается с помощью свойства Aligment, значения которого могут быть следующими:
1) taLeftJustify; // выравнивается по левой границе (по умолчанию);
2) taСenter; // выравнивается по центру;
3) taRightJustify;// выравнивается по правой границе.
Если вы сохраните в файле текст, введенный или отредактированный пользователем, то будет создан текстовый файл, содержащий только символы и не содержащий элементов форматирования. При последующем чтении этого файла в Memo формат будет определяться текущим состоянием свойства Font компоненты Memo, а не тем, в каком формате ранее вводился текст.
Для доступа ко всему содержимому Memo используется свойство Text типа TString. Для доступа к отдельным строкам используется свойство Lines типа Tstring:
Memo1.Lines[5]:=’abc’;
Очистить Memo можно методом Clear:
Memo1.Clear;
Добавить строку можно с помощью метода Add:
Memo1.Lines.Add(‘abc’);
Компонента Memo может реагировать на нажатие клавиши <Enter> при значении свойства WantReturns типа Boolean, равное True. Это значение установлено по умолчанию. Число строк в M emo хранится в свойстве Count (свойство только для чтения).
Компонента RichEdit работает с текстом в обогащенном формате RTF. При желании изменить атрибуты вновь вводимого фрагмента текста можно задать свойство SelAttributes. Это свойство типа TTextAttributes, которое в свою очередь имеет подсвойства: Color (цвет), Name (имя шрифта), Size (размер), Style (стиль) и др. В компоненте имеется также свойство DefAttributes, содержащее атрибуты по умолчанию. Эти атрибуты действуют до того момента, когда изменяются атрибуты в свойстве SelAttributes. Но значения атрибутов в DefAttributes сохраняются и в любой момент могут быть методом Assign присвоены атрибутам свойства SelAttributes, чтобы вернуться к прежнему стилю. За выравнивание, отступы и т.д. в пределах текущего абзаца отвечает свойство Paragraph типа TParaAttributes. Этот тип в свою очередь имеет ряд свойств, которые можно задавать только в процессе выполнения приложения, например в обработчике события при щелчке на какой-нибудь кнопке. Значение подсвойств свойства Paragraph относятся к тому абзацу, в котором находится курсор. Например, каждый из следующих операторов осуществит соответствующее выравнивание текущего абзаца:
RichEdit1. Paragraph. Aligment:=taLeftJustify; // влево
RichEdit1. Paragraph. Aligment:=taСenter; // по центру
RichEdit1. Paragraph. Aligment:=taRightJustify; // вправо
Основное свойство окон Memo и RichEdit − Lines, содержащее текст окна в виде списка строк и имеющее тип TStrings. Начальное значение текста можно установить в процессе проектирования, нажав кнопку с многоточием около свойства Lines в окне Инспектора объектов. Перед вами откроется окно редактирования списка строк. Вы можете редактировать и вводить текст непосредственно в этом окне либо нажать кнопку CodeEditor и работать в обычном окне Редактора кода. В этом случае, завершив работу с текстом, выберите из контекстного меню, всплывающего при щелчке правой кнопки мыши, команду Close Page и ответьте утвердительно на вопрос, хотите ли вы сохранить текст в соответствующем свойстве окна редактирования.
Сохранение текста в файле осуществляется методом SaveToFile, а загрузка текста из файла – LoadFromFile:
Memo1.SaveToFile (‘myfile.txt’);
Memo1.LoadFromFile (‘myfile.txt’);
RichEdit1.SaveToFile (‘myfile1.rtf’);
RichEdit1.LoadFromFile (‘myfile1.rtf’);
Справочные данные
Действия над строками и символами реализуются с помощью большого набора стандартных процедур и функций. В таблицах 9.2 –9.6 приведены описания процедур и функций (в квадратных скобках указываются необязательные параметры).
Таблица 9.2
Процедуры и функции для работы со строками
Процедура или функция
| Пояснение
| function Concat (SI [, S2,..., SN]: String): String;
| Возвращает строку, представляющую собой сцепление строк-параметров S1, S2,..., SN
| function Copy (St: String; index, Count: integer): String;
| Копирует из строки St Count символов, начиная с символа с номером Index
| procedure Delete (St: String; index, Count: Integer);
| Удаляет Count символов из строки St, начиная с символа с номером Index
| procedure Insert (SubSt: String; St, index: Integer);
| Вставляет подстроку SubSt в строку St, начиная с символа с номером Index
| function Length (St: String): integer;
| Возвращает текущую длину строки St
| function Pos (SubSt, St: String): integer;
| Отыскивает в строке St первое вхождение подстроки SubSt и возвращает номер позиции, с которой она начинается. Если подстрока не найдена, возвращается ноль
| procedure SetLength (St: String; NewLength: Integer);
| Устанавливает новую (меньшую) длину NewLengh строки St. Если NewLengh больше текущей длины строки, обращение к SetLength игнорируется
| Таблица 9.3
Подпрограммы преобразования строк в другие типы
Процедура или функция
| Пояснение
| function StrToCurr (St: String): Currency;
| Преобразует символы строки St в число типа Currency. Строка не должна содержать ведущих или ведомых пробелов
| function StrToDate (St: String): 'ГdateTime;
| Преобразует символы строки St в дату. Строка должна содержать два или три числа, разделенных правильным для Windows разделителем даты (в русифицированной версии таким разделителем является <.>). Первое число – правильный день, второе – правильный месяц. Если указано третье число, оно должно задавать год в формате XX или ХХХХ. Если символы года отсутствуют, дата дополняется текущим годом. Например, DateToStr(StrToDate ('28.06')) даст строку '28.06. 09'
| function StrTоDateTime (St: String): TdateTime;
| Преобразует символы строки St в дату и время. Строка должна содержать правильную дату (см. StrToDate) и правильное время (см. StrToTime), разделенные пробелом, например:
StrToDateTime('28.06 18:23')
| function StrToFloat (St: String): Extended;
| Преобразует символы строки St в вещественное число. Строка не должна содержать ведущих или ведомых пробелов
| function StrToInt (St: String): Integer;
| Преобразует символы строки St в целое число. Строка не должна содержать ведущих или ведомых пробелов
| function StrTolntDef (St: String; Default: Integer): Integer;
| Преобразует символы строки St в целое число. Если строка не содержит правильного представления целого числа, возвращается значение Default
| functiton StrTOIntRange (St: String; Min, Max: LongInt): LongInt;
| Преобразует символы строки St в целое число и возбуждает исключение ERangeError, если число выходит из заданного диапазона Min...Max
| Окончание табл. 9.3
Процедура или функция
| Пояснение
| function StrToTime (St: String): TdateTime;
| Преобразует символы строки St во время. Строка должна содержать два или три числа, разделенных правильным для Windows, разделителем времени (для русифицированной версии таким разделителем является < >). Числа задают часы, минуты и, возможно, секунды. За последним числом через пробел могут следовать символы <am> или <pm>, указывающие на 12-часовой формат времени
| Procedure Val (St: String; var X;Code: lnteger);
| Преобразует строку символов во внутреннее представление целой или вещественной переменной X, которое определяется типом этой переменной. Параметр Code содержит ноль, если преобразование прошло успешно, и тогда в Х помещается результат преобразования, в противном случае он содержит номер позиции в строке St, где обнаружен ошибочный символ, и в этом случае содержимое X не меняется. В строке St могут быть ведущие и/или ведомые пробелы
| Таблица 9.4
Подпрограммы обратного преобразования
Процедуры и функции
| Пояснения
| function DateToStr (Value: TDateTime): String;
| Преобразует дату из параметра Value в строку символов
| function DateTimeToStr (Value: TdateTime): String;
| Преобразует дату и время из параметра Value в строку символов
| procedure DateTimeToString (var St: String; Format: String; Value: TdataTime);.
| Преобразует дату и время из параметра Value в строку St в соответствии со спецификаторами параметра Format
| function FormatDateTime (Format: String; Value: TDateTime): String;
| Преобразует дату и время из параметра Value в строку символов в соответствий со спецификаторами параметра Format
| function FloatToStr (Value: Extended): String;
| Преобразует вещественное значение Value в строку символов
| Окончание табл. 9.4
Процедуры и функции
| Пояснения
| function FloatToStrF (Value: Extended; Format: TFIoatFormat; Precision, Digits: Integer): String;
| Преобразует вещественное значение Value в строку символов с учетом формата Format и параметров Precision и Digits
| function FormatFloat (Format: String; Value: Extended): String;
| Преобразует вещественное значение Value в строку символов с учетом спецификаторов формата Format (см. пояснения ниже)
| function IntToStr (Value: Integer): String;
| Преобразует целое значение Value в строку символов.
| function TimeToStr (Value: TdateTime): String;
| Преобразует время из параметра Value в строку символов
| procedure Str(X [:Width [:Decimals]]; var St: String);
| Преобразует число X любого вещественного или целого типа в строку символов St; параметры Width и Decimals, если они присутствуют, задают формат преобразования: Width определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа X, a Decimals − количество символов в дробной части (этот параметр имеет смысл только в том случае, когда X − вещественное число)
| В примерах таблицы 9.5 показаны строки для времени 19 ч 45 мин и даты 8 июня 2009 г.
Таблица 9.5
Спецификаторы формата даты/времени
Спецификаторы
| Пояснения
| c
| Отображает сначала дату в формате дд.мм.гг, затем через пробел время в формате чч.мм.сс: 08.06.09 19:45
| d
| Отображает день без ведущего нуля: 8
| dd
| Отображает день с ведущим нулем: 08
| dddd
| Отображает день недели: воскресенье (для нерусифицированной версии-Windows-sunday)
| ddddd
| Отображает дату в формате дд.мм.гг: 08.06.09
| dddddd
| Отображает дату в формате день Месяц год: 8 Июнь 2009 (для нерусифицированной версии Windows – 8 June 2009)
| Окончание табл. 9.5
Спецификаторы
| Пояснения
| m
| Отображает число месяца без ведущего нуля: 6
| mm
| Отображает число месяца с ведущим нулем: 06
| mmm
| Отображает сокращенное название месяца: июнь
| mmmm
| Отображает полное название месяца: Июнь
| у или yy
| Отображает две последние цифры года: 09
| yyy или yyyy
| Отображает все цифры года: 2009
| h
| Отображает час без ведущего нуля: 19
| hh
| Отображает час с ведущим нулем: 19
| n
| Отображает минуты без ведущего нуля: 45
| nn
| Отображает минуты с ведущим нулем: 45
| s
| Отображает секунды без ведущего нуля: 0
| ss
| Отображает секунды с ведущим нулем: 00
| t
| Отображает время в формате чч:мм: 19: 45
| tt
| Отображает время в формате чч:мм:сс: 19: 45: 00
| am/pm
| Отображает время в 12-часовом формате (am – до полудня, рm – после полудня). Для спецификаторов hh: mm am/pm получим 07: 45 pm
| ampm '
| Отображает время в 12-часовом формате, но без указания до/после полудня. Для спецификаторов hh:mm ampm получим 07: 45
| a/p
| Отображает время в 12-часовом формате а – до полудня, p – после полудня). Для спецификаторов hh:mm a/p получим 07: 45 p.
| /
| Отображает используемый в Windows разделитель даты. Для спецификаторов d/m/y получим 8.6.09
| :
| Отображает используемый в Windows разделитель времени. Для спецификаторов h:n:m получим 19:45:0
| Любые другие символы, указанные в строке Format, а также заключенные в апострофы или кавычки специальные символы-спецификаторы помещаются в выходную строку без преобразования, поэтому спецификаторы ‘h час n мин' дадут строку 19 час 45 мин, а 'h час «n мин» − 19 час n мин.
Таблица 9.6
Подпрограммы для работы с нуль-терминальными строками
Процедура или функция
| Пояснение
| function CharToOem (Str, OemStr: Pchаr): Bool;
| Преобразует символы строки Str из кодировки ANSI в кодировку DOS и помещает результат в OemStr. Всегда возвращает True
| function ChàrToOemBuff (Str, OemStr: PChàr; MаxLen: LongInt): Bool;
| Преобразует не более MaxLen символов cтроки Str из кодировки ANSI в кодировку DOS и помещает результат в OemStr. Всегда возвращает True
| function StrCаt(Dest, Source: PChаr): PChаr;
| Копирует строку Source в конец строки Dest и возвращает указатель на строку Dest
| function StrComp (Strl, Str2: PChаr): Integer;
| Побайтно сравнивает строку Str1 со строкой Str2 и возвращает следующий результат: =0 для Str1=Str2; > 0 для Str1 > Str2; < 0 для Str1 < Str2
| | function StrCopy(Dest, Source: PChаr): PChаr;
| Копирует строку Source в строку Dest и возвращает указатель на Dest. StrCopy не проверяет реальный размер памяти, связанный с Dest (он должен быть не меньше StrLen (Source)+1)
| | procedure StrDispose (Str: PChаr);
| Удаляет строку Str из памяти. Строка должна быть предварительно помещена в память функцией StrNew. Если Str=NlL, процедура ничего не делает
| | function StrECopy(Dest, Source: Pchаr): PChàr;
| Объединяет строки. Эта функция работает в точности как StrCat, но возвращает указатель на конец сцепленных строк, т.е. на терминальный ноль
| | function StrEnd (Str: PChàr): Pchàr;.
| Функция возвращает указатель на терминальный ноль строки Str
| | function StrIComp(Strl, Str2: PChаr): Pchаr;
| Функция сравнивает строки, игнорируя возможную разницу в высоте букв. Возвращает такой же результат, как и StrComp. Функция правильно работает лишь с латиницей. Для кириллицы ее нужно модифицировать
| | function StrLCаt(Dest, Source: PChàr; MaxLen: Word): PChàr;
| Копирует символы строки Source в конец строки Dest до тех пор, пока не будут скопированы все символы или когда длина сцепленной строки Dest не достигнет MaxLen. Возвращает указатель на сцепленную строку. В отличие от StrCopy эта функция блокирует возможное переполнение области памяти, связанной с Dest. Обычно в качестве MaxLen используется выражение SizeOf(Dest)-l
| | | | | | Продолжение табл. 9.6
Процедура или функция
| Пояснение
| function StrLComp(Dest, Source: Pchаr; MaxLen: Word): Pchаr;
| В отличие от StrComp сравнивает не более MaxLen символов строк. Возвращаемый результат такой же, как и у StrComp
| function StrLCopy (Dest, Source: PChàr; MàxLen: Word): PChаr;
| Копирует символы из строки Source в строку Dest до тех пор, пока не будет скопирована вся строка или пока не будет скопировано МaxLеn символов. В отличие от StrCopy блокирует возможность переполнения области памяти, связанной с Dest. В качестве MaxLen обычно используется выражение SizeOf(Dest)-l
| function StrLen(Str: PChаr): Cardinal;
| Возвращает длину строки
| function StrLIComp(Strl, Str2: PChаr; MаxLen: Word): PChаr;
| Сравнивает не более MaxLen символов строк, проверяя точное соответствие высоты букв. Возвращаемый результат см. StrСomр. Функция правильно работает только с латиницей.
| function StrLower(Str: PChàr): PChаr;
| Преобразует заглавные буквы строки Str к строчным и возвращает указатель на результат. Функция правильно работает только с латиницей
| function StrMove(Dest, Source: PChаr; Count: Word): Pchàr;
| Копирует точно Count символов строки Source в строку Dest и возвращает указатель на результат. Функция игнорирует действительные размеры строк и может выйти за их пределы
| function StrNew(Str: PChаr): Pchar;
| Помещает строку в память
| function StrPas(Str: PChàr): String;
| Преобразует нуль-терминальную строку в строку String
| function StrPCopy(Str: PChаr; S: String); PChar;
| Преобразует строку String в нуль-терминальную строку. Возвращает указатель на Str
| function StrPos(Strl, Str2: PChàr): PChàr;
| Ищет подстроку Str2 в строке Str1 и возвращает указатель на первое вхождение Str2 или NIL, если подстрока не найдена
| function StrRScan(Str: PChar; Ch: Chàr): PChàr;.
| Ищет символ Ch в строке Str и возвращает указатель на последний обнаруженный символ Ch или NIL, если символ не найден
| function StrScan(Str: PChar; Ch: Char): Pchar;
| Ищет символ Ch в строке Str и возвращает указатель на первый обнаруженный символ Ch или NIL, если символ не найден
| Окончание табл. 9.6
Процедура или функция
| Пояснение
| function StrUpper (Str: PChar): PChаr;
| Преобразует строчные буквы строки Str к заглавным и возвращает указатель на результат. Функция правильно работает только с латиницей
| function OemToChаr (OEMStr, Str: Pchar): Bool;
| Преобразует символы из кодировки DOS в кодировку ANSI и возвращает Truе
| function OemToCharBuff (OEMStr, Str: PChаr; MaxLen: LongInt): Bool;
| Преобразует не более MaxLen символов строки OemStr из кодировки DOS в кодировку ANSI и помещает результат в Str. Всегда возвращает True
| Пример программирования с использованием строк
Задание. Дана последовательность из 50 литер (строчных латинских букв, цифр). Напечатать этот текст, заменяя все цифры «9» – русской «x», а остальные входящие в него цифры – звездочкой.
Значения используемых компонент для программного интерфейса показаны ниже (табл. 9.7).
Таблица 9.7
Используемые компоненты
Компонента
| Свойство
| Значение
| Form1: TForm
| Name
Caption
| Form1
Работа со строками
| Button1: TButton
| Name
Caption
| Button1
Преобразовать
| Button2: TButton
| Name
Caption
| Button1
Выход
| Label1: TLabel
| Name
Caption
| Label1
Введите строку
| Edit1: TEdit
| Name
Text
| Edit1
отсутствует
| Edit2: TEdit
| Name
Text
| Edit2
отсутствует
| 1. Разработка алгоритма (рис. 9.1):
а) исходные данные: str – строка символов;
б) промежуточные данные: i – переменная целого типа, счетчик цикла;
в) результат: str – преобразованная строка.

Рис. 9.1. Схема алгоритма решения задачи
2. Текст программы:
Unit Unit1;
Interface
Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls
type
TForm1=class (TForm)
Label1: TLabel; //комментарий к полю ввода
Edit1: TEdit; //поле ввода строки
Label2: TLabel; //комментарий к полю вывода
Edit2: TEdit; //поле вывода измененной строки
Button1: TButton; //кнопка «выполнить»
Button2: TButton; //кнопка «выход»
Procedure Button2Click(Sender: TObject); //процедура, вызываемая
при щелчке на Button2
Procedure Button1Click(Sender: TObject); // процедура, вызываемая
при щелчке на Button1
private
{Private declarations}
public
{Public declarations };
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Close
end;
procedure TForm1.Button1Click(Sender: TObject); { процедура,
заменяющая цифры '9' буквой 'х', а остальные символы – на '*'}
var str: string;
i: integer;
begin
str:= Edit1.Text;
while pos (‘9’, str) > 0 do
str[pos(‘9’, str)]:= ’х’;
for i=1 to Length(str) do
if str[i] in [‘0’..’8’] then
str[i]:= ’*’;
Edit2.Text:= str;
end;
end.
Контрольные вопросы к главе 9
1. Какие виды строк существуют в Delphi?
2. Опишите короткую строку, состоящую из 10 символов.
3. Можно ли работать со строкой как с одномерным символьным массивом?
4. Каким образом можно преобразовать строковый тип в вещественный?
5. Каким образом можно преобразовать числовой тип в строковый?
6. С помощью какой функции можно найти подстроку в строке?
7. С помощью какой функции можно найти текущую длину строки?
8. Как можно передать короткие строки в качестве параметров подпрограмм?
9. Как можно передать длинные строки в качестве параметров подпрограмм?
10. Как можно использовать широкие строки в качестве параметров подпрограмм?
11. Как можно передать нуль-терминальные строки в качестве параметров подпрограмм?
12. Чем отличаются кодировки длинных и широких строк?
13. При помощи каких компонент можно ввести строку?
14. При помощи каких компонент можно вывести на форму строку?
15. Какие основные свойства у компонента Memo?
16. Какие основные свойства у компонента RichEdit?
17. Найдите ошибки в описаниях:
а) Const
adres:=’ул. Дейнеки,5’;
max=string;
б) Type
tf=string[125];
var
fstr.ft;
st2, st1,string[50];
nazv: string[280];
Не нашли, что искали? Воспользуйтесь поиском:
|