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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2008, 16:25   #11
ryton
Пользователь
 
Аватар для ryton
 
Регистрация: 23.05.2008
Сообщений: 97
По умолчанию

j надо увеличивать,а у тебя инкремент на i два раза
я не для этого мира и это так
ryton вне форума Ответить с цитированием
Старый 07.06.2008, 16:48   #12
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию

Не не, там инкремент и i и j.
Elm0 вне форума Ответить с цитированием
Старый 07.06.2008, 17:28   #13
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Elm0 Посмотреть сообщение
ну да - pos...
а вот вопрос
файл типа char я забил в него рандомом отдельных символов.
для того что б найти заданную строку в файле , я себе задачу представил так-
пока не конец файла сувать каждую строку символов в массив и уже оперировать в массиве
если в искомая строка найдена, фиксируем это (inc())
и идем дальше т.е. в тот же массив суем след строку и т.д.

алгоритм верен?
Нет, не верен. Во-первых, в char-файле нет никаких строк. Во-вторых, если начало искомой подстроки придётся на конец буфера, а её конец - на начало "следующего" буфера, то строка таким алгоритмом будет потеряна. Буфер нужно проверять не до самого конца. Вообще, говорю сразу, пример, который привожу, не является оптимальным. В любой книге по ДА или ДМ всегда есть пяток алгоритмов или, по крайней мере, их упоминаний, поиска образцов. Через хэш-суммы, деревья суффиксов и т.п.

Код:
var
    i           : longint;
    found       : boolean;
    tmp_idx     : longint;

    needle      : string;
    haystack    : string;

begin

    needle      := 'needle';
    haystack    := 'gf76t78t78fneeghhjneedlejsg67nhdfneedlesfsjks74784248needl';

    i := 1;

    while i - 1 <= (length(haystack) - length(needle)) do begin
        found := false;
        if(haystack[i] = needle[1]) then begin
            found := true;
            for tmp_idx := 1 to length(needle) do begin
                if (haystack [i + tmp_idx - 1] <> needle [tmp_idx]) then begin
                    found := false;
                    break;
                end;
            end;
        end;

        if found then begin
            writeln( needle, 'found at position ', i);
            i := i + length(needle);
        end
        else begin
            i := i + 1;
        end;
    end;

    readln;
end.
B_N вне форума Ответить с цитированием
Старый 07.06.2008, 17:50   #14
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

В посте №10.
Цитата:
until j<length(s)
Так цикл вообще работать не будет, j всегда меньше length(s)
puporev вне форума Ответить с цитированием
Старый 07.06.2008, 22:41   #15
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию

офигеть=(((да когда же я научусь думать правильно!!
Elm0 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в файле Zandrey Microsoft Office Excel 8 05.09.2008 12:23
Поиск нулей в файле.Хелп CESHNIK Общие вопросы C/C++ 1 22.02.2008 14:50
Поиск в файле lin Помощь студентам 3 25.05.2007 08:40
Поиск в файле asale Microsoft Office Excel 1 15.05.2007 23:33