Описание переменных строкового типа в Паскале
Переменные строкового типа д.б. описаны с использованием раздела описания либо непосредственно в разделе описания переменных
- Type st =string[n]; 2. Var s :string[n];
Var s :st;
где st - имя типа;
s - имя переменной;
n - размер строки (область памяти), количество символов в строке
(атрибут длины n=1..255).
Нулевой байт строки содержит информацию о ее фактической длине.
Операции с переменными строкового типа
Над переменными строкового типа (стрингами) можно выполнять следующие операции:
- присваивание (ввод/вывод);
- сравнение
- конкатенацию.
Присваивание в Паскале
Перемененной типа String можно присвоить значение другой переменной либо строковой константы
St:=’Студент’;
Stu:=St;
При этом длина строковой константы д.б. не более объявленной в противном случае избыточные символы будут проигнорированы.
Вввод / вывод
Перемененные типа Stringможно считывать из файла или записывать в файл целиком либо посимвольно, т.е. к каждому элементу строки можно обращаться как к элементу массива.
Readln(f, Str);
Writeln(f, Str);
For i:=1 to n do Readln(f, Str[i]);
For i:=1 to n do Writeln(f, Str[i]);
Сравнение в Паскале
Сравнение стрингов производится с помощью операций отношения (=, <>, <, >, <=, >=) путем по парного сравнения двух символов различных стрингов слева на право (сравниваются их числовые представления по таблице кодов ASCII).
Два строки равны, если они одинаковой длины и состоят из одинаковой последовательности символов.
‘a’<’b’ т. к. ORD(‘a’)<ORD(’b’)
‘a1’<’a2’ т. к. ORD(‘a1’)<ORD(’a2’)
‘ a’<’a ’ т. к. ORD(‘ ’)<ORD(’a’)
‘kom’<’com’ т. к. ORD(‘k’)<ORD(’c’)
Конкатенация (Сцепление) в Паскале
Конкатенация - ообъединение двух и более строк в одну. Операция обозначается знаком ‘+’ и имеет более высокий приоритет, чем сравнение. Она применяется к стринговым переменным и константам. При этом длина строковой константы д.б. не более объявленной в противном случае избыточные символы будут проигнорированы.
S:=St1+St2;
S:=’TURBO’+’PASCAL’;
R:=’5’+’.’+’5’; (R:=5.5)
Существует набор процедур и функций для работы со стоками. Основные, из которых приведены, в табл.1.
Таблица 1
п/ф |
Запись |
Назначение |
Пример |
ф |
Length(str) |
Определяет фактическую длину строки. |
Var Str :string[10];
***
Srt:=’ПЕТРОВ’;
L:=Length(str); (l=6) |
ф |
Concat(S1,…Sn) |
Cцепление строк |
S1:= ’ПЕТРОВ’;
S2:=Concat(S1,’Н. И.’) |
ф |
Pos(St1,Str) |
Обнаруживает в строке Str подстроку ST1 и выдает номер позиции (к), с которой она начинается и 0 если подстрока не обнаружена |
k:=Pos(‘55’,’1552’); (k=2)
k:=Pos(‘53’,’1552’); (k=0) |
ф |
Copy(Str,p,N) |
Выделяет из строки Str подстроку длиной Nначиная с позиции P |
s:=Copy(‘ПЕТРОВ’,4,3);
s:=’РОВ’ |
п |
Delete(Str,p,N) |
Удаляет из строки Str, начиная с позиции P, N символов |
S:= ’ПЕТРОВ’;
Delete(S,5,2);
S:= ’ПЕТР’; |
п |
Insert(Str1,Str,p) |
Вставляет в строку Str подстроку Str1 начиная с позиции P, N символов |
S:= ’ПЕТРОВ’;
Insert(S,’A’ ,7);
S:= ’ПЕТРОВA’; |
п |
Val(Str,N,k) |
Преобразует стринг Str в число N. k –код преобразования |
Val(‘30’,N,k); (N=30; k=0)
Val(‘3.0’,N,k);
(N=то же; k=2) |
п |
Str(N,Str) |
Преобразует число N в стринг в Str |
Str(55,S);S:=’55’ |
Пример 17.3. Заменить во введенном тексте фамилию ИВАНОВ на ПЕТРОВ.
Текст программы
Program string1;
Uses CRT;
Var
str :string;
p :integer;
Begin
ClrScr;
{ Writeln('Введите строку');
Read(str);}
str:=' Студент Иванов не посещал лекции,
студент Иванов не сдал экзамен ';
p:=Pos('€ў ®ў',str);
While p>0 do
Begin
Delete(str,p,6);
Insert('ЏҐва®ў',str,p);
p:=Pos('€ў ®ў',str);
End;
Writeln('Результат:');
Writeln(str);
Readln;
End.
Результаты работы программы
Результат:
Студент Петров не посещал лекции, студент Петров не сдал экзамен