Реализовать алгоритмы поиска подстроки в строке. - C (СИ)

Формулировка задачи:

Здравствуйте,требуется на основе алгоритмов прямого поиска; Кнута, Морриса и Пратта; Боуера и Мура реализовать алгоритмы поиска подстроки в строке. Самый простой способ. Спасибо

Код к задаче: «Реализовать алгоритмы поиска подстроки в строке. - C (СИ)»

textual
int strstr(const char *text, const char *pattern)
{
    //  Если шаблон подстроки пустой, то возвращаем 0
    if (! *pattern)
        return 0;
 
    // Необходимые переменные.
    int pos = -1;
    const char *a, * b;
 
    b = pattern;
 
    // перебираем строку посимвольно. Как мы помним C-строка - это массив символов. Поэтому нам удобнее работать через указатели.
    for (; *text != 0; text++){
        // увеличиваем значение позиции на 1.
        pos++;
 
        // В случае, если исмволы не идентичны, остальной код пропускаем.
        if (*text != *b) {
            continue;
        }
 
        // Если че у нас символ в текущей позиции строки равен первому символу шаблона, то запускаем бесконечный цикл.
        // Он прерывается в случае несовпадения символов.
 
        // "а" присваиваем "text" с ее текущей позиции. Тогда позиция text в цикле не меняется, а меняется позиция в "a".
        a = text;
 
        while(1) {
 
            // Если b достиг конца шаблона, то мы нашли полное совпадение и можем вернуть позицию pos
            if (*b == 0){
                return pos;
            }
 
            // Если же следующие символы не равны, то прерываем функцию
            if (*a++ != *b++) {
                break;
            }
        }
 
        // Позицию в b снова сбрасываем на начало.
        b = pattern;
    }
 
    return -1;
}

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

10   голосов, оценка 3.900 из 5


СОХРАНИТЬ ССЫЛКУ