Строка – это последовательность символов произвольной длины (до 255 символов). Строку можно рассматривать, как массив символов переменной длины. Максимальное количество символов в строке указывается при ее описании в квадратных скобках:
var str1: string[80]; str2: string;
Если в квадратных скобках не указан максимальный размер строки, то он считается равным 255.
Строка может быть описана как типизированная константа:
const str10: string[10]='январь';
В памяти для строки длины N отводится N+1 байт, пронумерованных от 0 до N. В нулевом байте хранится текущее значение длины строки.
Когда изменяется содержание строки, автоматически пересчитывается ее текущая длина и меняется значение 0-го байта. Всегда можно определить текущую длину строки:
l:=ord(str10[0]); writeln(l);
Допустимо обращение к отдельным символам строки:
var s: string; begin s:='стол'; writeln(s); { стол } s[3]:='у'; writeln(s); { стул } end.
Сцепление строк (конкатенация) “+”
Эта операция добавляет к первой строке вторую.
Пример 1:
var st1, st2, st3: string[20]; begin st1:='Турбо'; st2:='Паскаль'; st3:=st1+' '+st2; writeln(st3); { Турбо Паскаль} end.
Пример 2:
var st1, st2: string[7]; begin st1:='student'; {student} st2:='123'; {123 } st1:=st2+st1; {123stud} end.
Сравнение строк (>, <, >=, <=, =, <>)
Сравнение двух строк осуществляется следующим образом. Символы строк сравниваются попарно друг с другом так, что первый символ первой строки сравнивается с первым символом второй строки, второй символ первой строки - со вторым символом второй и т.д. Символы сравниваются путем сравнения их кодов во внутреннем представлении. Если одна строка короче другой, недостающие символы заменяются нулем. Отношение первой несовпадающей друг с другом пары символов и принимается за отношение двух строк.
‘abc’=’abc’ ‘Abc’<’abc’
‘ab’<’abc’ ‘Abc’<’1ab’
‘ABC’<’ab’
length (s: string): integer; - функция возвращает текущий размер строки (т.е. количество символов в строке; пробел тоже считается символом).
var n: integer; str: string[15]; begin str:='Turbo Pascal'; n:=length(str); write('n=',n); { n=12} end.
copy (s: string; n1, n2: integer): string; - функция копирует из сроки S n2 символов, начиная с символа n1.
st1:='abcdef'; st2:=copy(st1,2,3); { bcd }
delete (var s: string; n1, n2: integer); - процедура удаляет из строки S n2 символов, начиная с символа n1.
st1:='abcdef'; delete(st1,1,3); { def }insert (s1: string; var s2: string; n1: integer); - процедура вставляет строку s1 в строку s2, начиная с символа n1.
st1:='abcdef'; insert('++',st1,4); { abc++def }
pos (s1,s2: string): byte; - функция возвращает номер позиции первого вхождения строки s1 в строку s2. Если строка s1 не входит в строку s2, то возвращает 0.
st:='abcdef'; n:=pos('d',st); { n=4 } k:=pos('dc',st); { k=0 }
str (x[:M[:N]]; var s: string); - процедура преобразует число х в строку символов S; M,N – необязательные форматы вывода числа, аналогичные write.
var x: real; n: integer; st: string; begin x:=3.141592; n:=5; str(x,st);st='3.141592'; str(n,st);st='5'; str(x:4:2,st);st='3.14'; end.
val (s: string; var x, cod: integer); - процедура преобразует строку s в целое или вещественное число х. Если преобразование прошло успешно, то cod=0, иначе cod=номер символа, вызвавшего ошибку.
var x: real; n, cod: integer; st: string; begin st:='3.14'; val(st,x,cod); { cod=0 } val(st,n,cod); { cod=2 } end.
upcase (c: char): char; - функция преобразует строчную латинскую букву в заглавную
1)
var st: string; begin st:='a bc'; st[3]:= upcase(st[3]); write(st); { a Bc } end.
2)
repeat … write('Завершить? (Y/N)'); readln(c); until (upcase(c)='Y');
Пример 1: Удалить из строки все точки.
var st: string; n: integer; begin write('введите строку'); readln(st); repeat n:=pos('.',st); delete(st,n,1); until n=0; writeln(st); end.
Пример 2: Удалить из строки все цифры.
var st: string; n: integer; c: char; begin write('введите строку'); readln(st); for c:=’0’ to ‘9’ do repeat n:=pos(c,st); delete(st,n,1); until n=0; writeln(st); end.
Пример 3: Поменять в строке порядок символов на обратный (abcd на dcba).
var st: string; n: integer; c: char; begin write('введите строку'); readln(st); for i:=1 to length(st) div 2 do begin c:=st[i]; st[i]:=st[length(st)-i+1]; st[length(st)-i+1]:=c; end; writeln(st); end.
6.1. Определите значение переменной n после выполнения следующей программы:
var n: integer; str: string[25]; begin str:='Лев Толстой'; n:=length(str); write('n=',n); end.
6.2. Определите значение переменной st2 после выполнения следующих фрагментов программ:
а)
st1:='abc def'; st2:=copy(st1,5,2);
б)
st2:='abcdef'; delete(st2,3,2);
в)
st2:='abcd'; insert('***',st2,2);