Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2009, 13:59   #1
Work Group
 
Регистрация: 17.11.2009
Сообщений: 9
Восклицание строки и подстроки

ребята,можете помочь
написал программу,определяющая н-ое вхождения относительно начала вхождения подстроки в строку...но проблема...когда задаёшь строку 123123123 и подстроку 123 и задаёшь н равное 3 она выдаёт 0
можете помочь пожайлуста
Код:
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[i]);
 
 if count=n then writeln(nn) else write('0');
 readln;

end.
Work Group вне форума Ответить с цитированием
Старый 17.11.2009, 15:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не нравится мне твоя функция.
Предлагаю свою:
Код:
  var s:string;
              {$o-}
  function at(s,What:string;i:integer=1):integer;
  var e:integer;
  begin
   Result:=-1;
   e:=1; while e<=(length(s)-length(What)+1) do begin
    if (copy(s,e,length(What))=What) then begin
     Result:=e;
     if i=0 then     exit     else     dec(i);
    end;
    inc(e);
   end;
  end;
begin
 s:='123123123';
 Writeln(at(s,'123',4));
 Readln;
end.
В качестве оптимальной.
Смысл ее в том что равниваются подстрока и часть строки сразу блоком, и уменьшается счетчик правильных сравнений.
Как только счетчик дошел до нуля - возвращается позиция последнего сравнения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделить из строки подстроки, разделённые одной или несколькими запятыми Striker14 Помощь студентам 1 19.02.2009 08:33
Удалить из строки S1 первую, последнюю, все подстроки совпадающие с S2 ТРОЯН=) Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2008 23:28