Примеры задач

Строки символов


1. Задание: напишите функцию count, которая получает два параметра str1 и str2 типа string и возвращает число, указывающее, сколько раз str2 встречается в str1. Функция не должна изменять свои параметры. Кроме того, любая литера в str1 может учитываться не более чем в одном вхождении str2. Например, cout(‘балалайка’,’ала’) должна возвращать 1, а не 2.

Методика решения

Используемые переменные:
Str1, str2 – исходные строки;
S – строка, в которую заносятся первые length(str2) символов строки str1;
I, j – натуральные переменные для задания циклов;
Schet – счётчик количества вхождений;
K - номер позиции, начиная с которой строка str2 входит в str1.

Для реализации данной программы понадобятся следующие стандартные процедуры и функции для работы со строками:
Функция pos(s, c) определяет номер позиции, начиная с которой строка s первый раз входит в строку с ;
Процедура удаления delete(s, k, n) – из строки s удаляется n символов, начиная с k - того.

Функция count(str1,str2)
С помощью функции pos(str2, str1) определяем, начиная с какой позиции строка str2 первый раз входит в строку str1 .
С помощью процедуры delete(st,k,length(str1)) удаляем из строки str2 подстроку str1 и все символы, стоящие перед подстрокой str1 , начиная с первого. Счётчик увеличиваем на 1 (изначально его необходимо обнулить).
Эти действия необходимо повторять, пока есть вхождения строки str2 в строку str1 (пока pos(str2, str1) < > 0).
Функции возвращаем значение счётчика.

Листинг программы

Program ex4_5;
Uses Crt;
Var str1,str2,s:string;
i,j:integer;
Function Count(var str1,str2:string):integer;
Var schet,k:integer; st1,st2:string;
Begin
schet:=0;
while pos(str2,str1)<>0 do
begin
k:=pos(str2,str1);
schet:=schet+1;
delete(str1,1,k+length(str2)-1);
end;
Count:=schet;
End;
BEGIN CLRSCR;
WriteLn('Input str1: ');
ReadLn(str1);
WriteLn('Input str2: ');
ReadLn(str2);
WriteLn('Строка str2 встречается в строке str1 ',Count(str1,str2),' раз(а).');
READKEY;
END.

Запустить программу






Назад