Примеры задач
Строки символов
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.