Я ищу библиотеку diff C или С++. Я знаю, что я могу использовать инструмент Unix diff
в сочетании с system
или exec
, но мне действительно нужна библиотека. Было бы удобно, если бы библиотека могла выполнять исправления, например, инструмент Unix patch
.
Есть ли способ отделить файлы от С++?
Ответ 1
Я думаю, что нашел хорошее решение, наконец:
Библиотека шаблонов DTL - Diff --- Tutorial
Он поддерживает патч. Мне пришлось набрать "diff.cpp" в Google, чтобы найти его. Надеюсь, это сработает!
Ответ 2
Кажется, что библиотеки Google Diff, Match и Patch - это то, что вам нужно.
Ответ 3
Это представляет собой реализацию "решения SES/LCS с уточнением линейного пространства Хиршберга, как описано в следующей публикации":
Е. Майерс, "Разность O (ND) Алгоритм и его вариации, Алгоритмика 1, 2 (1986), 251-266. http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps
Нашел его на странице Wikipedia на странице.
Это только для поиска diff, хотя, не применяя его как патч. Я считаю, что применение патча на самом деле является более сложной проблемой; из-за риска конфликтов. Для разрешения конфликтов потребуется какая-то форма механизма управления пользователями.
Ответ 4
Subversion включает в себя библиотеку libsvn_diff
.
Ответ 5
Существует один, который является частью Mercurial. Он существует как некоторый C-код, который был разработан как расширение Python, но его можно было бы довольно легко извлечь. Я считаю, что он также может выполнять двоичные различия.
Соответствующие .c файлы mercurial/bdiff.c, mercurial/mpatch.c и, возможно, mercurial/diffhelpers.c.
Ответ 6
Кроме того, в Google очень мало прав, оказалось, что Gnulib имеет diff module. Это кажется достаточным для того, для чего я хотел использовать библиотеку diff. У него, похоже, нет модуля патчей.