uses crt;
var st,p:string;
i,j,n,nn,t,count:integer;
f:boolean;
begin
clrscr;
write('введите строку S: ');
readln(st);
write('введите подстроку P: ');
readln(p);
write('введите N: ');
readln(n);
count:=0;
for i:=1 to length(st)-length(p) do
begin
f:=true;
t:=i;
for j:=1 to length(p) do
begin
if st[t]<>p[j] then f:=false;
inc(t);
end;
if f then
begin
inc(count);
nn:=i;
end;
if count=n then break;
end;
//for i:=1 to length(st) do
//writeln(st);
if count=n then writeln(nn) else write('0');
readln;
end.
помогите довести программу
всё работает,только есть одно но...если есть строка фбсфбсфбс и подстрока фбс, и Н=3, то прога выдает ответ 0..
вот сама программа
Код:
Код:
for i:=1 to length(st)-length(p) do
В описанном вами примере, когда наблюдается ошибка, обработка пройдет для значений i от 1 по 9 - 3 = 6, а нужно от 1 по 7.
Соответственно нужно так:
Код:
for i:=1 to length(st)-length(p)+1 do
P.S. На общем фоне набега халявщиков очень приятно видеть человека, который сам написал программу, сам проверил для разных случаев, а при обращении с просьбой помочь найти ошибку - привел пример входных данных при которых она проявляется. Большой Вам +. :)
вот как всегда,какая-то фигня оказалась)))
не внимательный я)
я вообще хотел сделать через while что бы break избежать,но в принципе и так хорошо получается