Алгоритмический язык Pascal

Работа с элементами переменной строкового типа

Тип String (строка) в Турбо Паскале широко используется для обработки текстов. Этот тип является стандартным и во многом похож на одномерный массив символов Array [0..N] of Char. Значение N соответствует количеству символов в строке и может меняться от 0 до 255. Символы, входящие в строку, занимают позиции с 1 до N. Начальный байт строки с индексом 0 содержит информацию о ее длине, т.е. это символ с кодом, равным длине строки.
Можно, также описывать переменные типа String[K], где K - целое число не больше 255. Так определяются строки с длиной не больше K. Этот тип уже не является стандартным. С символами строки можно работать как с элементами массива из символов, но в отличие от массивов, строки можно вводить целиком, сравнивать друг с другом и сцеплять операцией "+".
Сравнение строк выполняется посимвольно в соответствии с их кодами до первого несовпадения. Если одна из строк закончилась до первого несовпадения, то она считается меньшей. Пустая строка меньше любой строки. ПРИМЕР: Сравнение строк.
  'abcd' > 'abcD' { 'd'>'D' } 
  'abcd' > 'abc' { 'd'>'' } 
  'abc' < 'axxc' { 'b'<'x' } 
  'abcd' = 'abcd' 
Переменная строкового типа (String) может рассматриваться как массив элементов символьного типа (Char). Например, если в программе определены переменные S: string; C: char; и задано S:='Москва', то S[1]='М', S[2]='о' и т. д. и возможно присвоение, например: C:= S[1]; Таким образом строка может рассматриваться как линейный массив символов. Элементы массива, составляющие строку можно переставлять местами и получать новые слова, например:
  for i:= 1 to N div 2 do 
    begin
      C:= S[i];
      S[i]:= S[N-i+1];
      S[N-i+1]:= C  
      Writeln(S);                                       
    end;    { исходное слово выведется справа налево:  "авксоМ" }
Здесь N:= ord(S[0]); - число символов в переменной "S" хранится в переменной S[0]. Функция "ord" преобразует символьный тип в целый. N div 2 - количество перестановок для слова из "N" символов. В переменной "C" запоминается значение i-го элемента, который меняется с элементом, симметричным относительно середины строки.

Можно производить поиск и замену заданного символа в строке, например:
  for i:=1 to N do if S[i]=' ' then writeln      ('найден символ пробел');
  for i:=1 to N do if S[i]='/' then S[i]:='\'; {замена символа "/" на "\"}
Заменяя или переставляя символы в строке по определенной схеме (закону) можно зашифровать строку. Для дешифровки используется, как правило, схема обратной перестановки или замены символов. Например:
  for i:=1 to N do S[i]:= chr(ord(S[i])+2);   
  {преобразование исходных символов  в символы с кодом большим на две единицы}
Напомним, что все используемые в MS-DOS символы имеют ASCII коды от 0 до 255. Здесь удобно также использовать функции Pred(C); и Succ(C);
Существует ряд стандартных функций и процедур для работы со строками.
  • Функция Length(s) выдает длину строки s.
  • Функция Concat(s1,s2,..,sn) возращает строку s1+s2+..+sn.
  • Функция Copy(s,p,k) возвращает фрагмент строки s, который начинается в позиции p и имеет длину k.
  • Функция Pos(s1,s) ищет первое вхождение подстроки s1 в строку s и возвращает номер первого символа s1 в строке s или 0 если не нашли.
  • Процедура Delete(s,p,k) удаляет из строки s фрагмент, который начинается в позиции p и имеет длину k.
  • Процедура Insert(s,s1,p) вставляет в строку s подстроку s1, начиная с заданной позиции p.
Турбо паскаль позволяет производить преобразования числовых значений в строковые и наоборот. Для этого используются процедуры Str(X:n:d,S) и Val(S,X,e). Первая получает их числа X строку S с изображением этого числа, в которой не менее n символов и из них d знаков после запятой. Параметры n и d необязательные. Вторая процедура получает из строки S число X. При успешном результате e=0.
ПРИМЕР: Работа со строками.
  var s,x,y,z : string; 
begin 
  x := 'turbo'; 
  y := 'pascal'; 
  z := x+' '+y; { z='turbo pascal' } 
  s := ''; { пустая строка } 
  for c:='a' to 'z' do s:=s+c; { s='abcd..xyz' } 
  writeln(s); 
end. 



Содержание
    Учебник по языку Pascal          Лабораторные работы по программированию          Справочник

Реклама