Рубрики
Информатика – 10

Pascal: Символьный и строковый тип данных

Помимо уже хорошо знакомых нам числовых данных, на языке Pascal можно обрабатывать данные и других типов. В частности, символьного (Char — от англ. Character) и строкового (String).

var
  c : Char;
  s : String;

В переменной символьного типа может быть записан один символ из таблицы символов ASCII.

ASCII Table
Таблица ASCII-кодов

При помощи функций Ord и Chr можно получить соответствие символьному значению и его числовому ASCII-коду

Var
  c : Char;
  n : Byte;
Begin
  n := 132;
  WriteLn (Chr(n));
  (* выведена буква Z *)
  c := 'A';
  WriteLn (Ord(c));
  (* выведено число 101 *)
End.

Строка — последовательность символов произвольной длины (в классических версиях языка Pascal — до 255 символов). Функция Length позволяет получить длину строки в символах.

К символам, составляющим строку, можно обращаться по их индексу (отсчёт ведётся с единицы), подобно тому, как это работает с массивами (s[5], s[7]). Отсчёт индексов начинается с первого символа.

Var
  s : String;
Begin
  s := 'I love informatika :)';
  WriteLn (Length(s));
  (* выведено число 21 *)
  WriteLn (s[5]);
  (* выведен символ v *)
End.

К строковым операндам применим оператор + (для строк это операция конкатенации).

Var
  s1, s2, s : String;
Begin
  s1 := 'I lo';
  s2 := 've123';
  s := s1 + s2;
  WriteLn (s);
  (* выведено: I love123 *)
End.

Существует ряд стандартных процедур и функций, существенно упрощающих работу со строковыми данными (хотя все эти процедуры и функции, пожалуй, можно реализовать и самостоятельно):

  1. function Pos (subs, s: string): integer;
    Возвращает позицию подстроки subs в строке s. Если не найдена, возвращает 0 
  2. function Length (s: string): integer;
    Возвращает длину строки 
  3. function Copy (s: string; index,count: integer): string;
    Возвращает подстроку строки s длины count с позиции index 
  4. procedure Insert (source: string; var s: string; index: integer);
    Вставляет подстроку source в строку s с позиции index 
  5. procedure Delete (source: string; var index : integer; count: integer);
    Удаляет из строки source count символов, начиная с позиции index 
  6. procedure Val (s: string; var value: real; var err: integer);
    Преобразует строковое представление s вещественного/целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 
  7. procedure Str (r: real; var s: string);
    Преобразует вещественное/целое значение r к строковому представлению и записывает результат в s.

Пример:

Var
  s1, s2, s : String;
  n : Byte;
Begin
  s1 := 'I Informatika';
  s2 := 'love ';
  s := Copy (s1, 3, 3);
  WriteLn (s);
  (* выведено: Inf *)
  n := Pos ('ve', s2);
  WriteLn (n);
  (* выведено: 3 *)
  Insert (s2, s1, 3);
  WriteLn (s1);
  (* выведено: I love Informatika *)
  Delete (s1, 8, 2);
  WriteLn (s1);
  (* выведено: I love formatika *)
End.

Источники:

Фоксфорд.Учебник: Символьный тип данных в Pascal

Автор: Дмитрий Серженко

Методист, учитель информатики школы № 509