Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

5.3.2 Стандартные процедуры и функции для строк

Турбо Паскаль представляет в распоряжение пользователя целый ряд функций и процедур, предназначенных для обработки строк.

Функция Length

Встроенная функция Length (длина) позволяет определить фактическую длину текстовой строки, хранящейся в указанной переменной.

Пример.

var

word: string;

begin

write ('Введите, пожалуйста, слово: ');

readln (word);

writeln ('Это слово состоит из ', length(word) : 3, ' букв!')

end.

При подсчете фактической длины строки учитываются все входящие в нее символы, в том числе и пробелы.

Функция Upcase

Функция Upcase позволяет преобразовывать символ любой литеры из строчного в прописной. Эта функция рассчитана на обработку отдельного символа, поэтому для обработки строки символов с помощью этой функции приходится организовывать цикл.

Пример.

var

word : string;

i : byte;

begin

word := 'Фирма Microsoft';

for i := 1 to length (word) do

word [i] := upcase (word[i]);

writeln (word); {Выводится текст " фирма MICROSOFT"}

end.

Русские литеры не могут обрабатываться этой функцией, поэтому в результате работы этой программы на терминал выдается строка, содержащая большие английские и маленькие русские буквы.

Функция Copy

Функция Copy позволяет копировать фрагмент некоторой строки из одной переменной в другую. Вызывая функцию copy, необходимо указывать следующие параметры:

  1. имя строки, из которой должен извлекаться копируемый фрагмент;

  2. позицию в строке, начиная с которой будет копироваться фрагмент;

  3. число копируемых символов.

Пример.

var

ws: string [79];

w1,w2,w3 : string [20];

begin

ws := 'фотографирование';

w1 := copy (ws, 1, 4); writeln (w1);

w2 := copy (ws, 5, 4); writeln (w2);

w3 := copy (ws, 10, 3); writeln (w3);

end.

В результате выполнения программы на экран выводится:

фото

граф

ров

Сообщения об ошибке не будет в случаях, если начальная или конечная позиции копируемого фрагмента находятся вне пределов исходной строки символов. Результатом выполнения операции в первом случае будет строка нулевой длины, во втором - фрагмент от начальной позиции копирования до конца исходной строки.

Функция Роs

С помощью функции Pos осуществляется поиск определенного фрагмента в строке. Если заданный фрагмент в строке присутствует, то функция возвращает номер позиции в строке, с которой фрагмент начинается. Если в строке фрагмент не найден, то функция возвращает ноль.

var

ws string [79];

sw string [20];

p : byte;

begin

ws := 'Электрификация';

sw := 'Эл'; p := Pos (sw,ws); writeln(p);

sw := 'три'; p := Pos (sw,ws); writeln(p);

sw := 'к'; p := Pos (sw,ws); writeln(p);

end.

В результате выполнения программы на экране появляется:

1

5

4

Функция Pos требует полного совпадения искомого фрагмента и фрагмента строки, в которой производится поиск. Большие и маленькие буквы считаются различными символами.

Процедура Delete

Удаление из строки. Для этого используется процедура Delete (Str,n,t), которая вырезает из строки Str t символов, начиная с n-го, таким образом сама строка изменяется.

Пример: Дан фрагмент программы:

Strl:='ABCDEFGH':

Delete(Strl, 3, 4);

Wrlteln(Strl);

После выполнения этих операторов из строки будут удалены четыре символа, начиная с третьего, то есть строка будет такой: Strl='ABGH'.

Процедура Insert

Вставка подстроки в строку. Это можно сделать, применяя процедуру Insert(Strl,Str2,n) — вставка строки Str1 в строку Str2, начиная с n-го символа, при этом первая строка остается такой же, как и была, а вторая получает новое значение.

Пример:

Strl:='ABCDEFGH';

Str2:='abcdefgh';

Insert(Strl, Str2, 3);

В результате выполнения данной процедуры строка будет такой — Str2=’abABCDEFGHcdefgh’. Этот же результат будет и после выполнения такой последовательности операторов:

Str2:='abcdefgh';

Insert('ABCDEFGH', Str2, 3);

Числа и строки

Надо заметить, что число 13 и строка ‘43' — это не одно и то же. Для работы с числами и строками применяются две процедуры.

Str(N,Strl) — переводит числовое значение N в строковое и присваивает результат строке Strl, причем можно переводить как целые числа, так и вещественные.

Пример:

Str(1234, Strl) - после выполнения Strl='1234';

Str(452.567,Strl) — переводим вещественное чис­ло в нестандартном виде, результат Strl='452.567';

Str(4.52567e-st-2,Strl) — переводим вещественное число в стандартном виде, в итоге:

Strl='4.52567e+2'.

Вторая процедура выполняет обратное действие. Val(Str, N, К) — переводит строковое значение в числовое, если данная строка действительно является записью числа (целого или вещественного), то значение к=0, а N — это число, иначе К будет равно номеру символа, в котором встречается первое нарушение записи числа N.

Пример 5.19 Ввести в ЭВМ строку символов. Количество символов в строке (n <40). Вывести встречающиеся в ней символы без повторов и количество этих символов.

Решение задачи сводится к следующему. Каждый символ строки сравнивается со всеми остальными, находящимися после него. Если данный элемент имеет номер i, то следующий – i+1 и т.д., до конца. При этом i изменяется от 1 до n-1. Если в результате сравнения окажется, что анализируемый символ встречается в правой части строки, то он не уникальный. Пока его можно не выводить, он будет выведен потом. Если i-тый элемент не равен ни одному из последующих, то он уникальный и его нужно вывести.

Например для строки 'АВВСА' уникальные символы будут выведены в следующем порядке: ВСА

Program Unicum;

var

s : string;

n, i, j, k, kols : integer;

begin

writeln('Введите строку');

readln(s);

n:=length(s);

kols:=0;

writeln('Символы строки без повторов ');

for i:=1 to n-1 do

begin

k:=0;

for j:=i+1 to n do {п.4.2}

if s[i]=s[j] then

k:=k+1;

if k=0 then

begin

kols:=kols+1;

write(s[i]:2);

end;

end;

writeln('Количество различных символов в строке - ',kols);

writeln('Работа окончена. Нажмите клавишу ENTER');

readln;

end.

Пример 5.20 Ввести в ЭВМ строку из n символов латинского алфавита (n<30). Расположить их по алфавиту.

Воспользуемся тем, что буквы латинского алфавита 'A' – 'Z', 'a' –'z' имеют коды, значения которых возрастают. При этом для решения задачи можно применять алгоритм сортировки "пузырьком".

Program Sorts;

var

s : string;

sr : char;

n, i, k : integer;

Begin

writeln('Введите строку');

readln(s);

n := length(s);

for k := 1 to n-1 do

for i := 1 to n-k do

if s[i]>s[i+1]then

begin

sr :=s[i];

s[i] := s[i+1];

s[i+1] := sr;

end;

writeln('Строка с упорядоченными символами:');

writeln(s);

End.

Пример 5.21 Задана последовательность символов S1 … Sn Подсчитать количество "!" знаков. Ввод каждого символа завершается ENTER.

Program pod;

var

s: array [1…100] of char;

p, i, n: integer;

begin

readln (n);

for i:=1 to n do

readln (s[i]);

for i:=1 to n do

if s[i]= '!' then p:=p+1;

writeln (p);

end.

Пример 5.22 Задана последовательность символов S1…Sn Подсчитать сколько цифр (09) в этой последовательности.

Program pod1;

var;

s: array [1…100] of char;