Стандартные операции со строками
- LENGTH (s) – функция, которая возвращает текущую длину строки.
Например,s := 'дисковод';
writeln (length(s));
результат: длина строки s равна 8
- POS (ss, s) - функция, которая возвращает номер позиции, с которой начинается подстрока ss в строке s. Если подстрока не найдена, то возвращается 0.
Например,
s := 'дисковод'; s := 'дисковод'; s := 'дисковод'; s := 'дисковод'; |
ss := 'иск'; ss := 'овод'; ss := 'вода'; ss := 'о'; |
writeln (pos (ss, s)); writeln (pos (ss, s)); writeln (pos (ss, s)); writeln ( pos (ss, s)); |
результат: 2 результат: 5 результат: 0 результат: 5 |
Обращаем внимание, что функция pos находит первое вхождение подстроки в строку, остальные вхождения функция не ищет.
- COPY (s, p, kol) - функция, которая возвращает подстроку длиной kol символов, выделенную из строки s, начиная с позиции p. Исходная строка s не изменяется. Если kol > length(s), то копирование происходит от позиции p до конца строки.
s – исходная строка,
p, kol – переменные целого типа.
Например,
s := 'дисковод'; |
ss := copy (s, 5, 4); |
результат: ss = 'овод' |
- DELETE (s, p, kol) – процедура, удаляющая из строки s количество символов kol, начиная с позиции p. В результате операции delete изменяется строка s и ее длина.
Если kol > length(s), то удаление происходит от позиции p до конца строки.
s – исходная строка,
p, kol – переменные целого типа.
Например,
s := 'дисковод'; s := 'дисковод'; s := 'дисковод'; s := 'дисковод'; s := 'дисковод'; |
delete (s, 5, 5); delete (s, length(s), 1); delete (s, 1, 1); delete (s, 5, 100); delete (s, 10, 100); |
результат: s = 'диск' результат: s= 'дисково' результат: s = 'исковод' результат: s = 'диск' результат: строка s не изменяется |
- INSERT (ss, s, p) – процедура, вставляющая подстроку ss в строку s, начиная с номера p.
ss - заданная подстрока,
s – исходная строка,
p – номер в строке s, начиная с которого будет вставлена подстрока ss. При этом строка ss не изменяется, а строка s изменяется.
Например,
s := 'диск'; |
insert ('овод', s, 5); |
результат: s = 'дисковод' |
- VAL (s, n, code) – процедура, переводящая строку s в число n (вещественного или целого типа). Если строку s можно по правилам языка рассматривать как соответствующее число, то code равно 0, если же сконвертировать строку s в число нельзя, то code отлично от 0.
s – исходная строка,
n – результат целого или вещественного типа,
code – переменная целого типа, код завершения.
Например, пусть переменные n, r, code, s описаны следующим образом:
var n : integer; r : real; code : integer; s : string;
s := '1234'; s := '+1234'; s := '-1234'; s := '12-34'; s := '12.34'; s := 'дисковод 3.5'; |
val (s, n, code); val (s, n, code); val (s, n, code); val (s, n, code); val (s, r, code); val (s, r, code); |
результат: n = 1234, code = 0 результат: n = 1234, code = 0 результат: n = -1234, code = 0 результат: n = 0, code = 3, 3-й символ не удалось сконвертировать в цифру результат: r = 12.34, code = 0 результат: n = 0, code = 1 |
- STR (n, s) – процедура, переводящая число n в строку s.
n – исходное число,
s – полученная в результате конвертации строка.
Например, пусть переменные n, r, s описаны следующим образом:
var n : integer; r : real; s : string;
n := 1234; n := -1234; r := 12.34; r := 1/2; |
str (n, s); str (n, s); str (r, s); str (r, s); |
результат: s = '1234' результат: s = '-1234' результат: s = '1.234000000E+01' результат: s = '5.0000000000E-01' |
Пример 1. Подсчитать количество цифровых символов в строке.
var s : string;
k, i : byte;
begin
readln (s);
for i :=1 to length (s) do
if ('0' <= s[i]) and (s[i] <= '9') then k := k + 1;
writeln (k);
end.
Пример 2. Подсчитать количество цифровых символов в строке.
var s : string;
k, i : byte;
begin
readln (s);
for i :=1 to length (s) do
if s[i] in ['0'..'9'] then k := k + 1;
writeln (k, '- количество цифр в строке');
end.
Пример 3. Заменить все вхождения символа 'a' на символ 'b'.
var s : string;
k, i : byte;
begin
readln (s);
for i := 1 to length(s) do
if s[i] = 'a' then s[i] = 'b';
writeln (s);
end.
Пример 4. Заменить все вхождения строки s1 на строку s2.
var s, s1, s2 : string; k, i : byte; begin readln (s); readln (s1); readln (s2); while pos (s1, s) <> 0 do begin k := pos (s1, s); delete (s, k, length (s1)); insert (s2, s, k); end; writeln (s); end. |
{ s - исходная строка } { s1 - строка, которую надо заменить } { s2 - строка, которая заменяет собой s1 } { пока встречается искомая подстрока s1 в строке s }
{ находим позицию первого вхождения подстроки s1 в строке s } { удаляем в этом месте подстроку s1 } { и в это же место вставляем новую подстроку s2 }
{ выводим результирующую строку } |