При выполнении операции конкатенации («склеивания») вида s1+s1 результат считается строкой типа string, т.е. занимает 256 байт. Однако если при конкатенации результат будет занимать более 255 символов, то программа завершится с ошибкой. Строки можно сравнивать, подразумевается их упорядоченность по алфавиту.
К символам в строке можно обращаться, используя индекс: s[i] обозначает i-й символ в строке. Обращение к нулевому символу s[0] считается ошибочным.
- 41 -
Для того чтобы узнать длину строки следует воспользоваться встроенной функцией Length (s).
Чтобы изменить длину строки, следует воспользоваться процедурой SetLength (s,n).
Если индекс i выходит за пределы памяти, отводимой под строку, то выдается сообщение об ошибке. Однако если индекс i выходит лишь за пределы длины строки, то сообщение об ошибке не выдается.
Тип char и тип string могут быть параметрами процедур и функций, а также возвращаться функциями. Для иллюстрации работы со строками и символами напишем функцию, заменяющую в строки заданный символ на другой и возвращающую результат.
ProgramStrings; // замена символов a на b в строке s
functionreplace(s : string; a,b : char):string;
vari : integer;
begin
fori:=1 toLength (s) do// цикл для всех символов строки
ifs[i]=a thens[i]:=b; // замена символов
replace:=s; // имени функции присваивается значение
end;
begin
writeln (replace('мама мыла раму','м','н')); // Проверка работы функции
end.
Тип char или string может использоваться для чтения информации из текстового файла, например:
ProgramReadText;
UsesCRT;
varname : string; // Имя файла
s : string; // Буфер для чтения строки
f : text; // Файловая переменная
n : integer; // Счетчик строк
begin
write('Введите имя файла: '); readln (name); // Ввод имени файла
assign (f,name); reset (f); // Открытие файла
n:=0; // Обнуление счетчика
whilenot eof (f) do// Чтение «пока не конец файла»
begin
readln (f,s); // Чтение одной строки из файла f
writeln (n:4,': ',s); // Вывод номера и строки на экран
inc(n); // inc(n) – операция увеличения на единицу
ifn mod 25 = 0 thenreadln; // Пауза после каждой 25-й строки
end;
close (f);
end.
Задание 15
1. С помощью функций ReadKey и Ord напишите программу, которая выводила бы сразу символ и его код по нажатию одной клавиши. (2 балла)
2. Напишите целочисленную функцию с двумя параметрами, подсчитывающую сколько раз символ, заданный вторым параметром, встречается в строке, заданной первым параметром, и проверьте её работу. (2 балла)
3. Напишите программу, запрашивающую имена файлов, и копирующую один файл в другой, заодно вычисляя число строк (или символов) в файле (3 балла)
- 42 -
Для работы с текстовыми строками в языке Pascal существует набор функций, который немного расширен в реализации ABC Pascal. Приведем справочник по этим функциям.
Стандартные процедуры и функции для работы со строками
Имя и параметры
|
Типы параметров
|
Тип возвращаемого значения
|
Действие
|
Length(s)
|
s - string
|
integer
|
возвращает длину строки s
|
Copy(s,index,count)
|
s - string, index и count - integer
|
string
|
возвращает подстроку строки s длины count, начиная с позиции index
|
Delete(s,index,count)
|
s - string,
|
|
удаляет в строке s count символов index и начиная с позиции index count - integer
|
Insert(subs,s,index)
|
s, subs - string, index - integer
|
|
вставляет подстроку subs в строку s с позиции index
|
Pos(subs,s)
|
s, subs- string
|
integer
|
возвращает позицию первой подстроки subs в строке s (или 0 если подстрока не найдена)
|
SetLength(s,n)
|
s - string, n - integer
|
|
устанавливает длину строки s равной n
|
Str(x,s)
Str(x:n,s)
Str(x:n:m,s)
|
s - string, x - integer, real и n, m - integer
|
|
преобразует x к строковому представлению (во втором и третьем случаях согласно формату вывода, устанавливаемому n и m) и записывает результат в строку s
|
Val(s,v,code)
|
s - string, v - integer, real, и code - integer
|
|
преобразует строку s к числовому представлению и записывает результат в переменную v. Если преобразование возможно, то в переменной code возвращается 0, если невозможно, то в code возвращается ненулевое значение
|
Читать дальше