Строки

### Конспект урока | Вопросы самопроверки | Задания на дом | Практикум | Тест

## Описание и использование строк.

### В Турбо Паскале предусмотрен специальный тип данных работы с текстовыми строками –строковый тип STRING. Тип STRING во многом напоминает одномерный массив символов
ARRAY [0..N] OF CHAR;
Но в отличие от последнего, количество символов в строке может меняться по ходу выполнения программы от 0 до N. Где N – это максимально допустимое количество символов в строке, указываемое при описании строковой переменной. Это значение может быть больше 255. Описание строковых переменных выглядит следующим образом:
Var
S:STRING[30];
В Турбо Паскале разрешается не указывать максимальное допустимое количество символов в строке. В этом случае за максимум принимается значение 255.
VAR
S:STRING;
Обращение к элементам строки (символам в строке) осуществляется по индексу – порядковому номеру символа в строке. При этом необходимо знать, что нумерация символов начинается не с 1, а с нуля.
VAR
S:STRING[30];
Begin
S:=’СЛJВА ТРУДУ’;
S[3]:=’A’;
End.

## Процедуры и функции, предусмотренные в Турбо Паскалe для работы со строками.

### В Турбо Паскале существует возможность складывать строки, т.е. сцеплять их с помощью стандартной операции сложения «+». Например:
S1:=S2+S3;При этом вторая строка дописывается в конец первой. Если размер результирующей строки станет превышать установленное для нее максимальное значение, то все «лишние» символы будут отброшены. Остальные операции над строками осуществляются с помощью перечисленных далее стандартных процедур и функций:
• CONCAT(S1,S2,…SN) – функция типа String, в качестве результата выдающая строку, являющуюся сцеплением перечисленных в скобках строк.
Например, вышеприведенную операцию сложения двух строк можно записать, как S1:=CONCAT(S2,s3); По названию этой функции операция сцепления (сложения) строк получила название конкатенация.
• DELETE(ST,INDEX,COUNT); - эта процедура из строки ST начиная с позиции INDEX удаляет COUNT символов.
• INSERT(SUBST,ST,INDEX); процедура, вставляющая в строку ST другую строку SUBST начиная с позиции INDEX (в строке ST);
• COPY(ST,INDEX,COUNT); - эта функция выдает строку, взятую из строки ST начиная с позиции INDEX. Количество взятых символов в этой строке равно COUNT.
• LENGTH(ST); - данная функция выдает значение типа INTEGER, являющееся текeщей длиной строки ST в символах. Таким образом, чтобы присвоить какой –либо переменной текущий размер строки S нужно выполнить следующее: P:=LENGTH(S);
• POS(SUBST,ST); - функция, разыскивающая вхождение подстроки SUBST в строку ST. В качестве результата своей работы она выдает либо 0- если вхождение обнаружено не было, либо целое положительное число (INTEGER), являющееся номером позиции, с которой выявлено вхождение. При этом оценивается только первое вхождение. Если вхождений несколько, то обнаружено будет только первое из них и только его позиция будет выдана в качестве результата функции.
• VAL(ST,X,CODE); - если переменная или константа типа STRING содержит символьное представление вещественного или целого числа, например ’12.8’ или ‘124’, то с помощью процедуры VAL можно преобразовать это число в значение переменной типа REAL. Здесь ST – это сама исходная строка, Х- это переменная, которой будет передано получившееся вещественное число. Целочисленный параметр CODE содержит 0, если преобразование произошло успешно, в противном случае – номер места в строке, в котором произошла ошибка.
• STR(X,ST); - процедура, обратная предыдущей, - преобразует число из переменной Х в строку, которая присваивается переменной ST.
Пример: Программа, которая считает, сколько раз встречается указанное пользователем слово в строке.

### PROGRAM STROKAINC1;
VAR
S,S1,S2:STRING;
K,I:INTEGER;
BEGIN
WRITELN('ВВЕДИТЕ ИСХОДНУЮ СТРОКУ');
READLN(S);
WRITELN('ВВЕДИТЕ СЛОВО, КОТОРОЕ СЛЕДУЕТ ИСКАТЬ');
READLN(S1);
S2:=S;
K:=0; {СЧЕТЧИК ВХОЖДЕНИЯ ИСКОМОГО СЛОВА В СТРОКУ}
WHILE POS(S1,S)>0 DO
BEGIN
K:=K+1;
DELETE(S,POS(S1,S),LENGTH(S1));
END;
WRITELN('КОЛИЧЕСТВО ВХОЖДЕНИЙ=',K);
END.

### 1. Как описывается строковый тип данных?
2. Как можно описать строку символов с помощью описания массива?
3. Как можно сцепить несколько строк?
4. Какая процедура удаляет из строки символы?
5. Какая процедура позволяет вставлять в строку символы?
6. С помощью какой функции можно определить длину строки?
7. С помощью каких процедур можно преобразовывать число в строку и наоборот строку в число?

### Написать программу, которая подсчитывает в строке количество букв А и В. Если букв А окажется больше, чем букв В, то программа стирает из строки все буквы В и выводит строку на экран.