Сборник по задачам и примерам Assembler




Прямой поиск в текстовой строке



Прямой поиск в текстовой строке

«Корень зла есть незнание истины», — сказал Будда.

Из этого же корня вырастает дерево заблуждения

со своими тысячными плодами страдания.

Цель поиска некоторой строки Р в строке большего размера S — определить первый индекс элемента в строке S, начиная с которого все символы S совпадают с символами строки Р. Для этого алгоритм поиска последовательно просматривает символы строки S, проводя одновременное сравнение ее очередного символа с первым символом строки Р. После возникновения такого совпадения алгоритм производит последовательное сравнение соответствующих элементов строк S и Р до возникновения одного из следующих условий:

  • в процессе поиска соответствия достигнут конец строки Р — это означает,

    что строка Р совпадает с некоторой подстрокой строки S;

  • достигнут конец строки S при незавершенном или неначатом просмотре строки Р — это означает, что строка Р не соответствует ни одна из подстрок S.
  • Одна из главных проблем, которую приходится решать при написании программы обработки символьной строки, — определение конца строки S. Здесь возможны два варианта:

  • статический — размер строки фиксирован некоторым значением N;
  • динамический (характерен для обработки массивов символьных строк) — длина строки определяется значением, являющимся либо первым элементом очередной строки, либо концевым (служебным) символом, значение которого заранее определено и не может совпадать ни с одним символом строки.
  • Начнем обсуждение прямого способа поиска с программы поиска в строке с фиксированной длиной. Для экономии места ограничим число вхождений Р в S рдним.

    ;prg4_67_f.asm - поиск строки Р в строке S, Длина S фиксирована.

    ;Вход: S и Р - массивы символов размером N и М байт (М=<N.
    :Выход: сообщение о количестве вхождений строки Р в строку S.

    '.data"

    :задаем массив S

    s db "Ax. какой был яркий день! Лодка, солнце, блеск и тень, и везде цвела сирень."

    Len_S=$-s

    Db "$" mes db "Вхождений строки - "

    :задаем массив Р - аргумент поиска




    Содержание  Назад  Вперед