#8 Строковый тип данных String в Паскаль. Начало работы со строками

Строковый тип данных позволяет использовать в программе последовательности из многих символов, которые также называют "строками".

Строковые литералы

Мы уже говорили о строковых литералах ранее.
Строковые литералы -- это последовательности символов взятые в кавычки, но в отличии от символьных литералов, в строковых может быть много символов (а в символьных только один).

Пример оформления строкового литерала:

'СПО ВГУ' // строка из 7 символов

Строковые переменные

Строковые переменные объявляются следующих образом:

var a, b, c: string; // объявляем три переменные строкового типа

Как и переменным других типов строковым переменным можно присваивать значения -- строковые литералы, другие строковые переменные или значения, возвращающие строковый тип.

Приведём пример присваивания литерала переменной и одной переменной другой переменной:

var a, b, c: string; // объявляем списком три переменные строкового типа
begin
  a := 'abc'; // строковый литерал из 3 символов
  b := a; // теперь b равно 'abc' (хранит в себе строку 'abc')
  с := b; //  теперь c равно 'abc'
end.

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

Конкатенация -- сложение строк

Пожалуй, самой распространённой операцией в Паскале является конкатенация строк. Эта операция состоит в том, что из двух "суммируемых" строк получается одна.
Рассмотрим пример:

var a,b,c : string;
begin
  a := 'SPO  ';
  b := 'VSU';
  c := a + b; // конкатенация строк
  writeln(c); // смотрим чему равно c
  readln();
end.   

-- запустите этот код. В консоли в качестве значения переменной $c$ мы получим строку:

SPO  VSU

Таким образом: для конкатенации строк мы используем оператор суммы $+$.

В строке:

c := a + b; // конкатенация строк

фрагмент:

a + b

является строковым выражением, так как его результат обладает типом strign.

Сравнение строк

Как и переменные всех простых типов (есть ещё т.н. сложные типы, о которых мы будем говорить в следующих уроках) строки можно сравнивать, для чего используются, в частности операторы $$ и $=$.

Далее рассмотрим примеры небольших программ, работающих со строками, в т.ч. их сравнивающие.

Разбор примеров

Пример №1 -- считывание строк

Задача:

Пользователь вводит произвольную строку. Cчитайте её, сложите саму с собой и выведите на экран.

Решение:

var s:string;
begin
   writeln('vvedite stroku:'); // выводим пояснение для пользователя
   readln(s);  // считываем строку
   s := s + s; // сложение строк
   writeln('Poluchaem: ', s);
   readln(); 
end.

Пример №2 -- считывание строки и её сложение с литералом

Задача:

Пользователь вводит произвольную строку. Cчитайте её, сложите саму со строкой '123' и выведите на экран.

Решение:

var s:string;
begin
   writeln('vvedite stroku:'); // выводим пояснение для пользователя
   readln(s);  // считываем строку
   writeln('Poluchaem: ', s + '123'); // подставляем выражение как второй аргумент процедуры вывода
   readln(); 
end.

-- в данном решении мы не записывали значение литерала в переменную, хотя могли бы, например:

var s, b:string; // объявим две переменные
begin
   writeln('vvedite stroku:'); // выводим пояснение для пользователя
   readln(s);  // считываем строку
   b := '123';
   writeln('Poluchaem: ', s + b); // подставляем выражение как второй аргумент процедуры вывода
   readln(); 
end.

Также мы могли бы объявить отдельную переменную для хранения результата, записать в неё результат конкатенации и затем вывести её значение:

var s, b, e :string; // объявим три переменные строкового типа
begin
   writeln('vvedite stroku:'); // выводим пояснение для пользователя
   readln(s);  // считываем строку
   b := '123';
   e := s + b;
   writeln('Poluchaem: ', e); // подставляем переменную в качестве второго аргумента процедуры
   readln(); 
end.

Пример №3 -- считывание двух строк и их сложение с записью в переменную

Задача:

Получите от пользователя две произвольных строки, сложите их, запишите результат конкатенации в переменную и выведите результат на экран.

Решение:

var s1, s2 :string;
begin
   writeln('Vvedite pervuy stroku:');
   readln(s1);

   writeln('Vvedite vtoruy stroku:');
   readln(s2);

   s1 := s1 + s2; // сложение строк, запишем в первую переменную, чтобы не объявлять третью
   write('Poluchaem: ', s1);
   readln();
end. 

Пример №4

Задача:

Получите от пользователя три строковых значения, выведете на экран результат проверки условия:
""первое значение равно второму или первое НЕ равно третьему""

Используя логическую операцию OR, и оператор сравнения $=$, можем решить так:

program Project1;

var a, b, c: string; // секция объявления переменных

begin  // начало тела программы

  //получим значения переменных от пользователя

  writeln('vvedite pervuy stroku: ');
  readln(a);
  writeln('vvedite vtoruy stroku: ');
  readln(b);
  writeln('vvedite tretiy  stroku: ');
  readln(c);

  writeln('otvet:', (a = b) OR (a <> c));

  readln(); // удерживаем консоль

end.

Самостоятельная работа

Вопросы

  1. Что такое оператор?
  2. Что такое конкатенация строк? Какой оператор используется для конкатенации?
  3. Задачи

  4. Объявите 5 переменных строкового типа. Одной из них присвойте значение и выведете значение этой переменной на экран.
  5. Получите от пользователя 5 строк, сложите их и выведите полученный результат на экран.
  6. Получите от пользователя три произвольных строки, одним выражением выполните конкатенацию следующим образом:

    ""первая строка + произвольный литерал + вторая строка + третья строка""

    Результат конкатенации выведите на экран.

  7. Получите от пользователя четыре строковых значения, выведете на экран результат проверки условия:

    ""первое значение равно третьему и первое НЕ равно четвертому или четвертое равно третьему"".