Символьный тип Char. Значением является один символ. Все символы упорядочены. Порядковый номер символа – его код. К данным символьного типа применимы операции отношения (сравниваются коды символов). Отображаемыми (на экране) являются символы с кодами от 32 до 255. Символы с кодами от 0 до 31 – управляющие. Русские и латинские буквы упорядочены по алфавиту.
Функции преобразования:
· Chr(X) – возвращает символ с кодом Х;
· Ord(C) – возвращает код (порядковый номер) символа С.
· Succ(C) – возвращает символ, следующий за символом С.
Строковый тип String. Строка – произвольная последовательность символов. Длина строки – количество символов в ней. Пустая строка не содержит ни одного символа. Ее длина равна нулю.
Стандартный паскаль допускает использование строк длиной до 255 символов - это тип String.
В Delphi для работы со строками есть типы:
- ShotString, аналогичный типу String в стандартном паскале;
- String для обработки строк сколь угодно большой длины, ограниченной лишь размерами памяти (такие строки размещаются в динамической памяти).
Строковая константа заключается в апострофы: ‘Мама мыла раму’.
Описание строковой переменной:
Var <имя переменной> : String [N];
где N – максимальная длина строки. Если она не указана, максимальной длиной строки считается число 255 для коротких строк (или любая длина для длинных строк).
Например:
Var Family : String [20];
Name : String [10];
P : String;
Номер символа в строке называется еще индексом. Для обращения к отдельному символу строки его индекс указывается после имени строки в квадратных скобках. Например, P[3] – 3-й символ строки P; Name[K] – K-й символ строки Name.
К данным строкового типа применима операция конкатенации (обозначается символом «+»). Например, после выполнения последовательности команд:
A:= ’тепло’;
B:= ’ход’;
C:= A+B;
в переменной С будет записана строка ‘теплоход’.
К данным строкового типа применимы операции отношения, причем строки сравниваются посимвольно, с учетом порядковых номеров символов в алфавите. Например, ‘мама’ < ’папа’, ‘машина’>’мама’.
Стандартные функции:
· Length (S) – возвращает длину строки S.
· Pos (P, S) – возвращает позицию первого вхождения строки P в строку S. Например, после выполнения последовательности команд:
A := ’крокодил’;
B := ’код’;
K := Pos (B, A);
N := Pos (‘о’, A);
M := Pos (‘a’, A);
переменные К, N, M примут следующие значения: K=4, N=3, M=0.
· Copy(S, K, N) – выделяет (копирует) часть строки S длиной N начиная с К-го символа. Например, после выполнения последовательности команд:
A := ’крокодил’;
B := Copy (A, 2, 3);
значением переменной В будет слово ‘рок’.
Стандартные процедуры:
· Delete (S, K, N) – удаляет из строки S N символов, начиная с K-го. Например, после выполнения последовательности команд:
A := ’корзина’;
Delete (A, 4, 3);
значением переменной A будет слово ‘кора’.
· Insert (P, S, K) – вставляет строку P в строку S начиная с позиции с номером K. Например, после выполнения последовательности команд:
A := ’кот’;
Insert (‘р’, A, 2);
значением переменной A будет слово ‘крот’.
· Val (S, N, K) – преобразует строку S в число N; K – номер позиции в строке S, где встретился символ, недопустимый в записи числа.
· Str (N, S) – преобразует число N в строку S.
Примеры решаемых задач
Пример 1. Составить программу, которая определит, сколько раз заданная буква встречается во введенном предложении.
Программа:
Program S1;
Uses Crt;
Var P : String [80]; { предложение }
B : Char; { буква }
K, N, M : Integer;
Begin
Clrscr;
Write (‘Введите предложение ’);
Readln (P); { ввели предложение }
Write (‘Введите букву ’);
Readln (B); { ввели букву }
M :=0; { обнулили счетчик заданных букв }
N := Length (P); { определили длину предложения }
For K := 1 To N Do { перебираем все символы предложения
от первого до последнего }
If P[K]=B { если К-ый символ строки Р равен заданной букве}
Then M := M+1; { увеличиваем счетчик букв }
Writeln (‘Буква ’, B, ‘ встречается в предложении ’, M, ‘ раз’);
{ вывели результат на экран }
Readln
End.
Пример 2. Составить программу, которая заменит во введенной строке один заданный символ на другой.
Программа:
Program S2;
Uses Crt;
Var P : String [80]; { строка}
B1, B2 : Char; { буквы }
K, N, M : Integer;
Begin
Clrscr;
Write (‘Введите строку текста ’);
Readln (P); { ввели исходную строку }
Write (‘Введите символ, который надо заменить ’);
Readln (B1); { ввели первый символ }
Write (‘На что заменять ? ’);
Readln (B2); { ввели второй символ }
N := Length (P); { определили длину предложения }
For K := 1 To N Do { перебираем все символы предложения
от первого до последнего }
If P[K]=B1 { если К-ый символ строки Р равен первому символу }
Then P[K] := B2; { записываем на К-е место в строку Р второй символ }
Writeln (‘Получилась строка: ’, P); { вывели результат на экран }
Readln
End.
Пример 3. Составить программу, которая определит количество слогов во введенном слове.
Модель: количество слогов в слове равно количеству гласных букв в нем. Следовательно, нужно вычислить количество гласных букв во введенной строке.
Программа:
Program S3;
Uses Crt;
Const Glas = ‘АЕЁИОУЫЭЮЯаеёиоуыэюя’; { константа содержит все
гласные буквы }
Var W : String [20]; { слово }
K, N, M : Integer;
Begin
Clrscr;
Write (‘Введите слово ’);
Readln (W); { ввели слово }
N := Length (W); { определили длину слова }
M := 0; { обнулили счетчик слогов }
For K := 1 To N Do { перебираем все буквы слова от первого
до последнего }
If Pos (W[K], Glas) > 0 { если К-ая буква слова W – гласная
(т.е.содержится в константе Glas) }
Then M := M+1; { увеличиваем счетчик слогов }
Writeln (‘В слове ’, M, ‘ слогов’); { вывели результат на экран }
Readln
End.
Пример 4. Составить программу, которая удаляет все пробелы из введенной строки.
Программа:
Program S4;
Uses Crt;
Var S : String [80]; { исходная строка }
K : Integer;
Begin
Clrscr;
Write (‘Введите строку ’);
Readln (S); { ввели строку }
While Pos(‘ ‘, S)>0 Do { пока в строке S есть пробелы }
Begin
K:= Pos (‘ ‘, S); { определили позицию первого пробела
в строке S }
Delete (S, K, 1) { удалили пробел из строки S }
End;
Writeln (‘Получилась строка ’, S); { вывели результат на экран }
Readln
End.
Пример 5. Составить программу, которая определяет количество слов во введенном предложении и выводит их на экран в столбик, если слова разделены произвольным набором разделителей.
Модель: Разделитель – пробел либо знак препинания. Условие начала слова: на i-м месте находится разделитель, на i+1 – буква (т.е. не разделитель). Условие конца слова: на i-м месте находится не разделитель (т.е. буква), на i+1 – разделитель. Исключение могут составлять первое и последнее слова предложения. Применим искусственный прием: допишем в начало и конец введенного предложения по одному пробелу (пробел – это один из разделителей).
Алгоритм: Будем рассматривать символы парами, запоминать позицию в которой слово началось. Если слово закончилось, необходимо увеличить счетчик слов, выделить слово из предложения и вывести его на экран.
Программа:
Program S5;
Uses Crt;
Const R = ‘ .,!?-():;’; { записали в константу все разделители }
Var S, W : String; { S – предложение, W – очередное слово }
N, K, L, A, B : Integer;
Begin
ClrScr;
Write (‘Введите предложение ’);
Readln (S); { ввели предложение }
S := ‘ ‘+S+’ ‘; { дописали пробелы в начало и конец предложения }
N := 0; { обнулили счетчик слов }
For K := 1 To Length (S) - 1 Do { перебираем все символы предложения от первого до предпоследнего }
Begin
A := Pos(S[K], R); { входит ли K-й символ в разделители}
B := Pos(S[K+1], R); {входит ли K+1-й символ в разделители}
If (A>0) And (B=0) { если слово началось }
Then L := K +1; { запоминаем позицию начала слова }
If (A=0) And (B>0) { если слово закончилось }
Then Begin
N := N+1; { считаем его }
W := Copy (S, L, K-L+1); { выделяем слово }
Writeln (W) { выводим слово на экран }
End
End;
Writeln (‘В предложении ’, N, ‘ слов ’); { выводим количество слов}