Тип string в Турбо Паскале широко используется для обработки текстов. Напоминает одномерный массив символов array [0..n] of char. Отличие: в массиве количество символов может меняться от 0 до n, где n – максимальное количество символов в строке. Значение n определятся объявлением типа string [n] и может быть любой константой порядкового типа, но не больше 255. Турбо Паскаль разрешает не указывать n. Тогда длина строки принимается максимально возможной n=255. Размер строки указывается в квадратных скобках.
Пример
var
str: string[80];
maxstr: string;
const
January: string[10]= ‘Январь’;
Для строк применимы операции конкатенации (+) и сравнения (=,<>,>,<,>=,<=,). Названные операции выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, то недостающие заменяются значением CHR (0).
function CHR (x:byte):Char;
Возвращает символ с указанным кодом.
x – число, определяющее код символа.
Пример
Код’ ‘ ‘ = 39
Код’ . ‘ = 46
‘А’ > ‘j’
65 49
‘Turbo’ < ‘Turbo Pascal’
‘Паскаль’ > ‘Turbo Pascal’
Program EXAMPLE11;
const
Instance: array [1..12] of string [10]= (‘ЯНВАРЬ’,’ФЕВРАЛЬ’,’МАРТ’,’АПРЕЛЬ’,’МАЙ’,’ИЮНЬ’,’ИЮЛЬ’, ‘АВГУСТ’,’СЕНТЯБРЬ’,’ОКТЯБРЬ’,’НОЯБРЬ’,’ДЕКАБРЬ’);
Month: Boolean = False;
var
str: string [10];
i: integer;
begin
writeln(‘введите заглавные символы’);
readln(str);
for i:=1 to 12 do
if str = instance [i] then month:=true;
if month then writeln(‘введено имя месяца’)
else writeln(‘введено не имя месяца’);
end.
К любому символу в строке можно обратиться точно так же, как и к элементу одномерного массива array [0..n] of char.
Пример
var
st: string;
begin
………….
if st [5] = ‘A’ then
……………………
Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ занимает второй байт и имеет индекс 1.
Для работы со строками используются специальные функции и процедуры:
- функции:
concat – объединение строк;
copy – копирование подстроки;
length – длина строки;
pos – поиск подстроки в строке;
- процедуры:
delete – удаление подстроки из строки;
insert – вставка подстроки в строку;
str – преобразование числа в строковую переменную;
val – преобразование символього представления
в двоичное представление.
Функция
Назначение и формат
Concat
Возвращает объединение строк;
concat (st1,st2);
str1,str2 – объединяемые строки.
Copy
Возвращает копию подстроки из j символов, которые располагаются в строке st, начиная с позиции I;
copy (st,i,j);
Length
Возвращает длину строки st;
length(st);
Pos
Возвращает номер позиции, начиная с которой располагается подстрока context в строке st;
pos(context,st);
Процедура
Назначение и формат
Delete
Удаляет из строки st j символов, начиная с позиции i; delete (st, i, j);
Insert
Вставляет подстроку context в строку st, начиная с позиции i;
insert (context, st, i);
Str
Преобразует число n в строковую переменную st;
str (n,st);
Val
Преобразует строку ST в двоичное число x, где cod – код неправильного символа; val(st, x, cod);
function concat (s1[s2,…sn]:string):string;
Объединяет несколько строк в одну (при необходимости усекает чрезмерно большую строку до 255 символов).
s1,s2…sn - объединяемые строки;
Пример
begin
writeln(concat(‘Здравствуй,’,’ день прекрасный’));
end.
Результат: Здравствуй, день прекрасный
function copy (s:string; index : integer; count : integer); string;
Создает подстроку строки s;
s-исходная строка;
index-номер первого выделяемого символа строки (если значение больше размера строки, возвращается пустая строка);
count – число выделяемых символов (если всех необходимых символов в строке нет, возвращается имеющийся остаток строки).
Пример
var
s:string;
begin
s:= ‘Здравствуй, день прекрасный‘;
writeln (copy (s, 1, 10))
end.
Результат: Здравствуй
function length (s:string):integer;
Возвращает текущий размер строки;
s- строка, у которой определяется размер.
Пример
var
s: string;
begin
s:=’ “turbo pascal” ‘;
writeln (‘ length = ‘, length (s));
end.
Результат: length=14
function pos (substr, s:string):byte;
Поиск последовательности substr в строке s (результат равен номеру первого символа строки s, с которой начинается искомая последовательность, или 0, если такой последовательности в строке нет);
index – номер первого удаляемого символа (если номер больше размера строки, то символы не удаляются);
count – число удаляемых символов (если символов в строке недостаточно, удаляется остаток символов).
Пример
var
s: string;
begin
s:= ‘Honest Abe Lincoln’;
delete (s,8,4);
Writeln (s);
end.
Результат: Honest Lincoln
procedure insert (source: string; var s: string; index: integer);
Помещает подстроку source в строку s (если строка получается слишком большого размера, то она уменьшается до 255 символов).
s – исходная строка;
source – подстрока, помещаемая в строку;
index – номер позиции исходной строки, начиная с которой помещается подстрока.
Пример
uses crt;
var
s: string;
begin
clrscr;
s:= ‘ Здравствуй, прекрасный ‘;
insert ( ‘ день ‘, s, 12 );
writeln(s); end.
Результат: Здравствуй, день прекрасный
procedure str (x[:m[:n]]; var s: <строковый тип>);
Преобразует число в последовательность символов;
x – выражение вещественного или целого типа;
s – строка типа string или Pchar, в которую записывается символьное представление числа;
m, n – форматы вывода целого типа, аналогично процедуре write. Первый определяет размер поля, в которое выводится данное значение, второй – для вещественных чисел число знаков после запятой (следовательно, с фиксированной точкой).
Пример
var
st:string;
a:integer;
begin
read(a);
str(a, st);
writeln(a,' ',st);
writeln(a+a,' ',st+st)
end.
Входные данные
Результат
Замечание
$a
10 10
20 1010
шестнадцатеричное число $a ($aaa) в ЭВМ переходит в двоичное представление, над ним осуществляются действия по его преобразованию в строковую
$aaa
2730 2730
5460 27302730
-123
-123
-246
-123
-123-123
procedure val (s:< строковый тип>; var v; var code: integer);
Преобразует символьное представление числа в двоичную форму;
s –строка типа string и Pchar с символьным представлением числа;
v – переменная целого или вещественного типа для записи двоичного представления числа;
code – номер неправильного символа;
0,если изображение числа правильное.
Пример
var
i, code: integer;
par: string;
begin
read (par); {Get text from command line }
val ( par, i, code); { Error during conversion to Integer ? }
if code <> 0 then
writeln (' Error at position: ' , code)
else
writeln ( ' Value = ' , i);
writeln (par, ' ' , i);
writeln (par + par, ' ' , i + i)
end.
Входные данные
Результат
code
$ 123
$ 123
$ 123$123
Stop
stop
stopstop
$0
$0
$0$0
$$11
$$11
$$11$$11
Последствия аварийных ситуаций (недопустимое представление числа в символьной форме) зависят от выбранного ключа компилятора
{$R+/-} и типа преобразуемого числа.
Если используется {$R+}, то при недопустимом символе в представлении числа переменная code принимает значение номера неправильного символа, а переменная v принимает значение 0. При этом же ключе в случае переполнения результата программа выбрасывается.
Если {$R-}, а v типа real или longint, то в той же ситуации code принимает значение номера неправильного символа, а v – 0 .
С переменными других типов использовать процедуру в этом случае нецелесообразно, т.к. code принимает всегда значение 0, v будет иметь неправильное значение в случае неправильного представления исходного числа. Завершающие пробелы в символьном представлении числа рассматриваются так же, как ошибочные символы и должны быть удалены до использования процедуры val.
Пример
Дана строка символов до точки. Определить, является ли она палиндромом.