Строки
Символьные массивы
Var s: array [1..N] of char;
- Можно присваивать значения строковых констант (длины должны совпадать ).
при N=12 s:=‘Turbo Pascal’;
при N=5 s:=‘AA BB’; или s:= #65#65#32#66#66
- Операция конкатенации +
Var s1: array [1..5] of char;
s2: array [1..6] of char;
s1:=‘Turbo’; s2:=‘Pascal’;
Writeln(s1+ ‘ ’+s2);
Cтроки
Var
- s: string;
- s: string [N];
S[0]-фактическая длина строки в литерном виде
Ord( S[0])- числовое значение дл. строки.
- Сравнение s:=‘ABCDEF’; s:=‘ABCDFG’;
- Строки можно обрабатывать посимвольно: s[i]
- S:= <строковое выраж.> ;
- Операция + s:=s1+s2;
Var s:string[10];
S1,s2: string[7];
Begin s1:=‘123456’; s2:=‘ABCDEF’; s:=s1+s2;
(s:=‘123456ABCD’)
Для ввода и вывода строковых значений используются стандартные процедуры
ReadLn(S); Read(S);
WriteLn(S); Write(S).
При вводе строк с клавиатуры следует учитывать, что длина буфера ввода составляет 128 символов. Поэтому при использовании оператора ReadLn(S) в строку S может быт занесено не более 127 символов.
Процедуры для обработки строк
Delete(S,N,M) - процедура удаления из строки S некоторой ее части.
Здесь S - строковая переменная,
N, М- константы, переменные или выражения любого целого типа.
Процедура производит следующее действие: из строки S, начиная с N-ой позиции удаляется М символов. Результат сохраняется в строке S. Если N > Length(S), то удаления символов не произойдет. Если М + N > Length(S), то
удалится конец строки, начиная с N-ой позиции.
Insert(Sl, S, N) - включение строки S1 в S, начиная с N-ой позиции. Результат
сохраняется в S.
Здесь
S - строковая переменная;
S1 - строковая константа, переменная или выражение;
N - константа, переменная или выражение любого целого типа.
Str(X,S) - перевод числа Х в строку S.
Здесь
X -целое или действительное число (с форматом или без него),
S - строковая переменная.
Val(S, X, К) - перевод строки S в число X.
Здесь
S - строковая константа, переменная или выражение;
X - числовая переменная;
К - параметр целого типа, фиксирующий наличие ошибки
При работе со строками следует помнить, что если строка заполнена или преобразована по байтам (т.е. посимвольно) без использования специальных процедур и функций или операции "+", то содержимое нулевого байта строки не меняется, т. е. фактическая длина строки остается прежней.
Пусть
VAR S: string;
и 40 байт в S занято символами, т.е.K:=Length(s) дает40.
Если использовать оператор
for I: = 1 to 5 do S[40+I] :='*';
дополняющий строку пятью символами "*",
то К := Length(S) ?
Для того, чтобы фактическая длина строки стала 45, следует
использовать
S[0] : = chr(45).
Пример. Дана строка символов. Группы символов, разделенные пробелами, будем называть словами. Найти наибольшую длину слов палиндромов («перевертышей»). Если палиндромов нет, то ответом должно быть число 0.
PROGRAM Example_JJ;
LABEL 1;
VAR
S: string; {исходная строка}
I_begin, L : byte; {начало текущего слова, его длина}
L_max : byte; {наибольшая длина слов-палиндромов}
N: byte; {длина строки}
I: byte; {номер текущего символа}
J: byte;
BEGIN
Writeln('Bвeдume строку символов');
Readln(S);
N: = Length(S);
L_max: = 0;
I: = 1;
While I<=N do
begin
I_begin : = I; { начало слова}
while (S[I] <>' ' ) and (I<= N) do
Inc(I); {просмотр слова}
L := I - I_begin; {длина слова}
{проверка: слово — палиндром}
for J:= 1 to L div 2 do
if S[I_begin +J-1] <> S[I_begin + L-J] then goto 1;
if L_max < L then L_max := L;
{пропуск пробелов}
1: while S[I] =' ' do Inc(i);
end;
Writеln('Максимальная длина =' , L_max);
Readln
END.