Цитата:
Сообщение от Олес
Описать функцию PosLast(subS,S) целого типа, возвращающую номер позиции, с которой в строке S содержится последнее вхождение подстроки subS. Если в строке S отсутствуют подстроки subS, то функция возвращает 0. пожалуйста, помогите написать программу как можно подробнее. почему она считает с конца? зачем нужно k?
|
Знаете... я, извините, не стал разбираться с Вашей программой, а просто накатал свою. Надеюсь, устроит.
Пояснения:
1. В Паскале существует стандартная функция Pos(Substr,S:String):Byte, возвращающая индекс (номер первого элемента) вхождения подстроки в строку. Почему бы ею не воспользоваться?
2. Но если таких вхождений несколько, то функция Pos выдаст индекс первого из них. А нам надо последнего.
3. Выход: проинвертировать (переписать наоборот от конца к началу) и строку, и подстроку, потом через Pos найти индекс.
4. Но найденный индекс будет соответствовать последней букве исходной подстроки, причем считая справа налево.
5. Поэтому индекс нужно пересчитать.
Код:
Function PosLast(Subs, S: string): byte;
var
k,i,L1,L2: byte;
S_inv,Subs_inv:String;
begin
L1:=Length(S);
S_inv:='';
for i:=1 to L1 do
S_inv:=S_inv+S[L1-i+1];
L2:=Length(Subs);
Subs_inv:='';
for i:=1 to L2 do
Subs_inv:=Subs_inv+Subs[L2-i+1];
k:=Pos(Subs_inv,S_inv);
if k>0 then k:=L1+2-k-L2;
PosLast:=k;
end;
var
s,s1: string;
begin
writeln('Enter the string:');
readln(s);
writeln('Enter the substring:');
readln(s1);
writeln('Last entry position number is ', PosLast(s1,s));
readln
end.
Программа отлажена и оттестирована на Free Pascal.