Строка - последовательность символов. Минимальная длина строки равна нулю. Это - пустая строка. Строки похожи на одномерные массивы, но могут изменять длину во время работы программы. В Turbo Pascal 7 есть 2 типа данных для работы со строками.
var ss: string; st: string[20]; begin ss:= 'Это пример строки'; st:= copy(ss,1,11)+ ss[5]+'рограммы !'; writeln (st); readln; end. ------- Результат: Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International Это пример программы
В примере строка st описана с указанием максимальной длины (лишние символы справа отбрасываются), поэтому результат равен: st ='Это пример программы'.
ss[5] - это 5-й символ строки ss, т е 'п'. Copy - это функция, которая (здесь) возвращает 11 символов строки ss, начиная с 1-го символа. Знак + соединяет строки. Цепочка символов, заключенная в апострофы есть КОНСТАНТА строкового типа.
Каждый символ строки занимает при хранении в памяти один байт. В памяти хранится код символа, т е число 0..255. Длину строки можно увидеть в нулевом символе, т е ss[0] = 17 и st[0] = 20, но чтобы это увидеть в программе, требуется преобразование к типу Byte, например:
writeln('Длина строки ss = ', byte(ss[0]));
Существует много подпрограмм для работы со строками (но в Delphi их еще больше, а в PHP - много)
--------------- procedure Delete (var S: string; Index,Count:Integer); Удаляет подстроку из строки S. Параметр S - переменная строкового типа. Index и Count - целочисленные выражения. Delete удаляет Count символов из строки S, начиная с позиции Index. --------------- procedure Insert (Source: string; var S: string; Index: Integer); Вставляет подстроку в строку. Параметр Source - выражение строкового типа. Параметр S - переменная строкового типа любой длины. Index - выражение целочисленного типа. Процедура Insert вставляет строку Source в строку S в позиции с номером Index. Если возникающая в результате строка длиннее 255-и символов, то она усекается после 255-го символа. --------------- procedure Str (X [: Width [: Decimals ]]; var S) Преобразовывает число в строку. Преобразовывает числовое значение X в строковое представление этого числа, Необязательные: Width - ширина поля вывода, Decimals- число цифр дробной части. -------------- procedure Val (S; var V; var Code: Integer) Преобразовывает строковое значение в его числовое представление. Где: S - переменная строкового типа. Должна представлять последовательность символов, формирующих число. V - переменная типа Real или Integer Code - переменная типа Integer Преобразовывает строковое значение (S) в его числовое представление, как это происходит при чтении из текстового файла с помощью Read. Code - позиция, в которой произошла ошибка при преобразовании, или нуль, если ошибки не было. ------------------ function Copy (S; Index, Count: Integer): string; Возвращает подстроку строки. Параметр S - выражение строкового типа. Index и Count - выражения целочисленного типа. Функция Copy возвращает подстроку строки S, содержащую Count символов, начиная с символа с номером Index. ---------------- function Length (S): Integer; Возвращает динамическую длину строки. ----------------- function Pos (Substr: string; S: string): Integer; Параметры Substr и S - строковые выражения. Pos ищет первое вхождение строки Substr в строку S и возвращает целочисленное значение, которое является индексом первого символа Substr внутри S. Если строка Substr не найдена, то Pos возвращает нуль. ------------- Примечание: подробнее - читайте в справочной системе Турбо-Паскаль7
Эти же подпрограммы есть в Делфи. Чтобы найти их и другие подпрограммы, поступим так:
1. В окне редактора (среды IDE Делфи), где виден текст разрабатываемого модуля допишем lehgth к какому-нибудь комментарию, например: { Public declarations length }
2. Поставим курсор внутрь lehgth (это имя одной из строковых функций) и нажмем клавишу F1. Далее в окошке "Найденные разделы" выберем Length function ( Object ...
Щелкнем "Показать". Получим справку об этой функции. НО САМОЕ ВАЖНОЕ - здесь же список подпрограмм для работы со строками (string handling routines). Щелкаем эту ссылку и видим список. Незнающим английский не стоит комплексовать, так как разобраться в синтаксисе можно, зная только Паскаль. Однако имена подпрорамм понимать очень полезно.
3.Например,
function AnsiEndsText(const ASubText, AText: string): Boolean;
возвращает true, если строка ASubText является суффиксом (окончанием) строки AText.
Здесь ANSI-кодировка (1 символ в 1 байте), Ends- конец, Text- вероятно, угадаете.
4.Аналогично можно найти тригонометрические функции Делфи, "зацепившись" за sin
(Category - trigonometry routines), или арифметические, начав с sqrt - корень квадратный.(Category -arithmetic routines)
uses strings; {подключаем модуль} var ss: string; ssP,stP: PChar; ii:Integer; begin ssP:= 'Это пример строки'#0; ss:= Copy(StrPas(ssP),1,11)+ ssP[4]+'рограммы !'; StrPCopy(stP, ss); for ii:=0 to StrLen(stp) {длина строки типа PChar} do write(stp[ii]); readln; end. {Программа выводит: Это пример программы ! }В этом примере работа со строками выполняется над данными типа string, а показанные здесь функции StrPas StrPCopy выполняют только преобразование типов. Для использования этих подпрограмм необходимо подключить модуль strings. Тип PChar необходим для обращения к функциям ОС Windows, т е при использовании WinAPI (для этого в Делфи есть модуль Windows, а в TPas7 - WinProcs, WinTypes) Рассмотрим аналогичный пример в Делфи (консольная программа). Комментарии в тексте.
program PChar1; {$APPTYPE CONSOLE} uses sysutils; var pss,pst: PChar; ss: string; begin pss:= 'Eto primer stroki'; ss:= copy(StrPas(pss),1,11) + pss[4]+'rogrammi !'; { StrPas(pss) - преобразует строку pss к типу string copy - функция, рассмотренная ранее для Turbo Pascal } GetMem(pst,Length(ss) + 1); { GetMem - выделяет переменной pst память на 1 больше размера строки ss} pst := StrPCopy(pst,ss); writeln('Result= ',pst); readln; {Программа печатает: Result= Eto primer programmi ! } end.
var ss: string; sp: PChar; begin . . . ss:= PChar(sp);Примеры преобразований можно видеть в предыдущем примере.