6.1 Описание строк

 

Строка – это последовательность символов произвольной длины (до 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.

6.2 Операции со строками

Сцепление строк (конкатенация) “+”

Эта операция добавляет к первой строке вторую.

Пример 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’

 

6.3 Процедуры и функции для работы со строками

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);