powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм подсветки совпадений в двух строках
25 сообщений из 26, страница 1 из 2
Алгоритм подсветки совпадений в двух строках
    #36205187
Igor Vitaliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две строки. Нужно найти в них совпадающие подстроки. Например:
какаятострокалевоготекста
непонятночтозатекстоваястрока

Как такую штуку сделать?
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205232
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без введения минимальной длины совпадающей подстроки задача неполна.

Модератор:
редактировано
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205265
Igor Vitaliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понял... может имелось ввиду "минимальной длины совпадающей подстроки"? Если так, то пусть будет, например, 3. Если не так, то тогда прошу объяснить подробнее.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205289
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor VitalievНе понял... может имелось ввиду "минимальной длины совпадающей подстроки"? Если так, то пусть будет, например, 3. Если не так, то тогда прошу объяснить подробнее.Да, именно так. Прошу прощения за свое косноязычие.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205472
crt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем-то мне это архивирование напоминает.
там ведь тоже совпадающие подстроки ищут, насколько я понимаю
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205479
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

а зачем? И почему не полна
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205558
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizmiksoft,

а зачем? И почему не полнаа потому что иначе один символ - это тоже подстрока.
и для более-менее длинных исходных строк практически всё будет совпадать.

два символа - тоже очень часто могут совпадать.
в приведенном примере должны совпадать подстроки "ка", "ят", "то"...
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205580
Аналитик88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если знаете, ответьте для случая где длина совпадающей строки задается переменной.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205581
Аналитик88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или возможно задать поиск полностью совпадающих слов, т е окруженных проблема.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205633
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот готовый код для поиска и замены подстрок в текстовом файле.
Из книги "Ansi Common Lisp"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
(defstruct buf
  vec (start - 1 ) (used - 1 ) (new - 1 ) (end - 1 ))

(defun bref (buf n)
  (svref (buf-vec buf)
         (mod n (length (buf-vec buf)))))

(defun (setf bref) (val buf n)
  (setf (svref (buf-vec buf)
               (mod n (length (buf-vec buf))))
        val))

(defun new-buf (len)
  (make-buf :vec (make-array len)))

(defun buf-insert (x b)
  (setf (bref b (incf (buf-end b))) x))

(defun buf-pop (b)
  (prog1
      (bref b (incf (buf-start b)))
    (setf (buf-used b) (buf-start b)
          (buf-new b) (buf-end b))))

(defun buf-next (b)
  (when (< (buf-used b) (buf-new b))
    (bref b (incf (buf-used b)))))

(defun buf-reset (b)
  (setf (buf-used b) (buf-start b)
        (buf-new b) (buf-end b)))

(defun buf-clear (b)
  (setf (buf-start b) - 1  (buf-used b) - 1 
        (buf-new b) - 1  (buf-end b) - 1 ))

(defun buf-flush (b str)
  (do ((i ( 1 + (buf-used b)) ( 1 + i)))
      ((> i (buf-end b)))
    (princ (bref b i) str)))

(defun file-subst (old new file1 file2)
  (with-open-file (in file1 :direction :input)
    (with-open-file (out file2 :direction :output
                         :if-exists :supersede)
      (stream-subst old new in out))))


(defun stream-subst (old new in out)
  (let* ((pos  0 )
         (len (length old))
         (buf (new-buf len))
         (from-buf nil))
    (do ((c (read-char in nil :eof)
            (or (setf from-buf (buf-next buf))
                (read-char in nil :eof))))
        ((eql c :eof))
      (cond ((char= c (char old pos))
             (incf pos)
             (cond ((= pos len)             
                    (princ new out)
                    (setf pos  0 )
                    (buf-clear buf))
                   ((not from-buf)         
                    (buf-insert c buf))))
            ((zerop pos)                   
             (princ c out)
             (when from-buf
               (buf-pop buf)
               (buf-reset buf)))
            (t                              
             (unless from-buf
               (buf-insert c buf))
             (princ (buf-pop buf) out)
             (buf-reset buf)
             (setf pos  0 ))))
    (buf-flush buf out))) 


Работает так:

В файле "testl" находится следующий текст:

«The struggle between Liberty and Authority is the most
conspicuous feature in the portions of history with which
we are earliest familiar, particularly in that of Greece,
Rome, and England. »


После вычисления
Код: plaintext
(file-subst " th" " z" "test1" "test2")

, файл "test2" будет содержать:

«The struggle between Liberty and Authority is ze most
conspicuous feature in ze portions of history with which
we are earliest familiar, particularly in zat of Greece,
Rome, and England. »


Пользуйся, если разберешься.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205634
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот черт. Че то я не в тему. Тебе подсветку надо, а не замену.
Ну, принцип то один :)
Когда находим совпадение, не меняем, а подсвечиваем :)
Главное - найти.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205640
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, что то вообще не в тему, смотрю.
Надо меньше пить :(
Чингис, удали меня нафиг из этого топика :)
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205863
ResearchStudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor VitalievЕсть две строки. Нужно найти в них совпадающие подстроки. Например:
какаятострокалевоготекста
непонятночтозатекстоваястрока

Как такую штуку сделать?

"в лоб" это решается четырьмя вложенными циклами. Какая длина строк ?
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205873
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResearchStudio"в лоб" это решается четырьмя вложенными циклами. Какая длина строк ?а четвертый зачем?
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205916
Igor Vitaliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ResearchStudioКакая длина строк ?
Не сильно длинные, примерно 30-50 символов.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205953
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, еще нужно задать, учитываются наложения или нет.
например в строках "123кукуку456" и "78куку90" нужно сколько символов в первой строке выделять? 4 или 6?
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205956
ResearchStudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftResearchStudio"в лоб" это решается четырьмя вложенными циклами. Какая длина строк ?а четвертый зачем?

вообще да, можно обойтись тремя
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205961
ResearchStudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor VitalievResearchStudioКакая длина строк ?
Не сильно длинные, примерно 30-50 символов.

тогда "в лоб" перебирать, проще всего

менее 125 000 итераций для двух строк в 50 символов.
По времени это меньше половины секунды наверное займет
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205963
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResearchStudioменее 125 000 итераций для двух строк в 50 символов.Хм, по-моему - 2500 итераций в худшем случае (когда нет совпадений).
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205968
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftResearchStudioменее 125 000 итераций для двух строк в 50 символов.Хм, по-моему - 2500 итераций в худшем случае (когда нет совпадений).это если наложения совпадений не допускаются.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205981
ResearchStudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftmiksoftResearchStudioменее 125 000 итераций для двух строк в 50 символов.Хм, по-моему - 2500 итераций в худшем случае (когда нет совпадений).это если наложения совпадений не допускаются.

больше 2500, однозначно

первый цикл перебирает позицию в первой строке
второй цикл перебирает позицию во второй строке
третий цикл перебирает предпологаемую длину подстроки

тоесть если быть более точным гдето 2500*25
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36205983
ResearchStudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но это общие прикиды, суть в том что "в лоб" здесь решение наиболее простое и приемлемое по времени
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36208572
Igor Vitaliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, похоже, что можно делать "в лоб".
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36208616
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResearchStudiomiksoftmiksoftResearchStudioменее 125 000 итераций для двух строк в 50 символов.Хм, по-моему - 2500 итераций в худшем случае (когда нет совпадений).это если наложения совпадений не допускаются.

больше 2500, однозначно

первый цикл перебирает позицию в первой строке
второй цикл перебирает позицию во второй строке
третий цикл перебирает предпологаемую длину подстроки

тоесть если быть более точным гдето 2500*25Если наложения совпадений не допускаются, то третий цикл может продвигать счетчики первого и второго.
...
Рейтинг: 0 / 0
Алгоритм подсветки совпадений в двух строках
    #36208694
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttchingizmiksoft,

а зачем? И почему не полнаа потому что иначе один символ - это тоже подстрока.
и для более-менее длинных исходных строк практически всё будет совпадать.

два символа - тоже очень часто могут совпадать.
в приведенном примере должны совпадать подстроки "ка", "ят", "то"...
и шо? в условии ограничений не было. Может постановщик задач хочет найти
подстроки длиной 1 тоже. Зачем отсебя придумывать?
Я понимаю добавлять ограничения, если не можешь решить.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм подсветки совпадений в двух строках
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]