Строка - последовательность символов. Минимальная длина строки равна нулю. Это - пустая строка. Строки похожи на одномерные массивы, но могут изменять длину во время работы программы. В 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);Примеры преобразований можно видеть в предыдущем примере.