Данное строкового типа — это ограниченная последовательность произвольных символов (то есть элементов типа char). Постоянные строкового типа записывают при помощи двух штрих-символов (апострофов), охватывающих текст. Строка может иметь от 0 до 255 символов. Например, 'Украина', 'Львовская политехника', '' - пустая строка нулевой длины, ' ' - строка, состоящая из одного символа-пропуска.
Переменную строкового типа объявляют с помощью слова string так:
var<переменная> : string[n];
где n —длина строки, n<256. Длину строки можно не указывать. Например,
constslovo = 'University';
varfrazal : string[45];
fraza2 : string;
Над переменными строкового типа определены операции объединения (символ операции +) и сравнения (<, <=, >, >=, =, <>). Сравнение двух строк осуществляется слева направо до первых различных символов, причем 'А' < 'В', 'В' < 'С' и т.д. «Большим» считается символ, который размещён в алфавите дальше (он имеет больший номер в таблице кодов компьютера ASCII). Числовой код символа даёт функция ord, например, ord('B') = 66, ord('A') = 65. Обратное действие выполняет функция chr: chr(66) даёт 'В'.
Пример. Пусть tl = 'New', t2=' Year'. Тогда объединением этих строк будет s := tl + t2 (результат: s = 'New Year'). Здесь s > tl.
Пример. Вывести на экран строчные буквы латинского алфавита и их коды можно таким образом:
for v := 'a' to'z' do
writeln(v, ord(v):5);
Для обработки данных строкового типа предназначены стандартные функции:
length(<строка>) — определяет количество символов в заданной строке;
сору(r,m,n) -даёт n символов строки r, начиная с символа с номером m;
concat(rl,r2, ...,rn) — объединяет строки rl, ..., rn в одну строку;
pos(rl, r2) - определяет номер символа, с которого начинается
вхождение строки rl в строку r2.
и процедуры
insert(rl, <переменная>, n) - вставляет строку rl в строку,
которая задана переменной, начиная с позиции n;
dе1еtе(<переменная>, m, n) — удаляет n символов со строки,
которая задана переменой, начиная с позиции m;
str(<число>, <переменная>) - переводит числовое данное в
данное строкового типа;
val(rl, s1, s2) — засылает в числовую переменную s1 числовой образ строки rl. Если это возможно, то переменная s2 получает значение 0, иначе - числовое значение номера первого недопустимого символа заданной строки.
Указанная переменная передает в процедуру входное данное строкового типа и получает обратно измененную строку - результат выполнения процедуры.
Пример.Пусть переменная Lvov имеет значение 'Львовская политехника'. Рассмотрим примеры функций и их значения:
Функция
Значение
length(Lvov)
21;
copy(Lvov, 15, 11)
'техника';
concat(Lvov,' - 2001')
'Львовская политехника - 2001';
pos(V, Lvov)
15.
Следующие процедуры присвоят переменной Lvov такие значения:
Процедура
Значение переменной Lvov
Insert('HУ', Lvov, 1)
'НУ Львовская политехника'
delete(Lvov, 6, 16)
'Львов'
str(2001, Lvov)
'2001'
val('1256', Lvovl, Ozn)
Lvovl = 1256, Ozn = 0
Существует два способа обработки данных типа string. Первый: всю строку пользователь обрабатывает как единое данное с помощью описанных выше функций и процедур. Второй: строку рассматривает как массив символов и обрабатывает ее поэлементно.
Пример. Значения строковым переменным frazal и fraza2 можно присвоить, а потом вывести их на экран так:
frazal := 'Вы любите каникулы?';
for i := 1 to 19 do{Вводим текст с клавиатуры}
read(fraza2[i]);
writeln(frazal);
writeln(fraza2);
Задача 1. Кодировка текста. Удалить из некоторой фразы а все пропуски, запятые и точки, другие символы продублировать. Вывести результат.
programMyCode;
uses Crt;
var a, b, с : string;
i : integer;
Begin
clrscr;
write('Введите текст: ');
readln(a);
b:= '';
for i := 1 to Length(a) do
Begin
с := copy(a, i, 1); {или поэлементно так: с := a[i];}
if (с <> ',') and (с <>'.') and (с <>' ' )
thenb := b + с + с
end;
writeln(b);
readln
End.
Задание 1. Модифицируйте программу MyCode таким образом, чтобы в некоторой фразе заменить все буквы «а» на «о», а «м» на «н».
Задача 2. Написать программу, которая всюду в заданном тексте mytext будет заменять каждое встретившееся слово word1 другим словом такой же длины word2.
programFindAndChange;
usesCrt;
varmytext, wordl, word2 : string;
i, k : integer;
Begin
clrscr;
write('Введите текст: ');
readln(mytext);
write('Введите искомое слово: ');
readln( wordl);
write('Введите второе слово: ');
readln(word2);
k := length(wordl);
for i := 1 to length(mytext) - k do
ifcopy(mytext, i, k) = wordl then
Begin
delete(mytext, i, k);
msert(word2, mytext, i)
end;
writeln(my text);
readln
End.
Задача З. Пусть задана строка 'Я люблю Мерседес'. Определить длину строки. Вывести на экран второе слово этой строки.
programStroka;
usesCrt;
constrl : string = 'Я люблю Мерседес';
vari, k, m, nl, n2 : integer;
Begin
clrscr; m := 0;
k := length(rl);{Определяем длину строки}
writeln('Длинa строки k =', k);
for i := 1 to k do{Перебираем все символы строки}
ifrl[i] = ' ' then{и ищем пропуск}
Begin
m := m + 1;
{Определяем номер первого пропуска}
ifm = 1 thennl:=i;
{Определяем номер второго пропуска}
if m = 2 thenn2 := I
end;
{Выводим слово между двумя пропусками}
for 1 := nl + 1 to n2 - 1 do
write(rl[i]);
readln
End.
Задание 2. Решите задачу 3, используя функцию pos для определения позиции пропуска и процедуру delete для получения второго слова.
Задание 3. Некоторый текст закодируйте кодом Цезаря, поменяв каждую букву на четвертую за ней в алфавите.