Linux 如何实现差分功能?

Linux 如何实现差分功能?,linux,diff,Linux,Diff,如何实现diff函数,例如堆栈溢出的问题修订历史记录?这里介绍了diff算法的实现 基于: 通信ACM,21,(4),264-268(1978) 该实现本身有两个功能,建议使用其中一个功能: diffString( String oldFile, String newFile ) 此方法接受两个字符串并计算每个字符串的差异。最终结果是用HTML标记的“newFile”(表示从旧文件中删除和添加到新文件) 这里有一个diff算法的实现示例 基于: 通信ACM,21,(4),264-268(1

如何实现
diff
函数,例如堆栈溢出的问题修订历史记录?

这里介绍了diff算法的实现

基于:

通信ACM,21,(4),264-268(1978)

该实现本身有两个功能,建议使用其中一个功能:

diffString( String oldFile, String newFile )
此方法接受两个字符串并计算每个字符串的差异。最终结果是用HTML标记的“newFile”(表示从旧文件中删除和添加到新文件)

这里有一个diff算法的实现示例

基于:

通信ACM,21,(4),264-268(1978)

该实现本身有两个功能,建议使用其中一个功能:

diffString( String oldFile, String newFile )

此方法接受两个字符串并计算每个字符串的差异。最终结果是用HTML标记的“newFile”(表示从旧文件中删除和添加到新文件)

我想唯一的方法是比较构成两个字符串的每个字符。大概是这样的:


void diff(String first,String second) {
   int biggest = (first.length() > second.length()) ? first.length() : second.length();
   for(int i = 0;i < biggest;i++) {
      //compare each char from the longest string with each char from the shorter
      // do something with them if they're not equal
   }
}

这只是我将如何做的一个草图。一切都取决于您想对数据做什么。

我想唯一的方法是比较构成两个字符串的每个字符。大概是这样的:


void diff(String first,String second) {
   int biggest = (first.length() > second.length()) ? first.length() : second.length();
   for(int i = 0;i < biggest;i++) {
      //compare each char from the longest string with each char from the shorter
      // do something with them if they're not equal
   }
}

这只是我将如何做的一个草图。一切都取决于您想对数据做什么。

我会找到FreeBSD diff实用程序的代码,并将其用作基线。当许可证允许这种复制时,重新发明轮子是没有意义的。

我会找到FreeBSD diff实用程序的代码,并以此作为基准。当许可证允许这种复制时,重新发明控制盘是没有意义的。

如果你想要的是修订历史,不要从差异开始重新发明控制盘。只需将一切投入版本控制并使用其差异和日志记录功能即可。对于简单的线性历史,我们可以做一些简单的事情。或者你可以向它投掷最新的大炮并使用它


大多数diff实用程序都会逐行进行diff。堆栈溢出会逐字进行diff。为此,类似的操作是必要的。大多数版本控制系统都允许您插入diff实用程序。开箱即用,
git diff--color words
与此处的操作非常接近。只要稍微修改一下设置,你就可以让它吐出一些东西,然后制作成一个漂亮的网页。

如果你想要的是修订历史,不要从diff开始重新设计轮子。只需将所有东西都放到版本控制中,并使用它的diff和日志记录功能。对于简单的线性历史,我们可以做一些简单的事情。或者你可以向它投掷最新的大炮并使用它


大多数diff实用程序都会逐行进行diff。堆栈溢出会逐字进行diff。为此,类似的操作是必要的。大多数版本控制系统都允许您插入diff实用程序。开箱即用,
git diff--color words
与此处的操作非常接近。只需稍微修改一下设置,您就可以让它吐出一些东西,然后制作成一个漂亮的网页。

大多数算法都基于LCS:。以一种有效的方式实现它并不明显。您可能会在网上找到各种语言的不同实现。

大多数算法都基于LCS:。以一种有效的方式实现它并不明显。您可能会在网络上找到各种语言的不同实现。

我认为您需要提供更多信息……我认为您需要提供更多信息……这是一种选择,但在这种特殊情况下(diff代码库),从头开始编写会容易十倍。差异代码库是。。。至少可以说是拜占庭式的。它已经足够古老,让你看了不到10分钟就尖叫着跑。我知道,我已经看过了:)这是一个选择,但在这个特殊情况下(diff代码库),从头开始编写它会容易十倍。差异代码库是。。。至少可以说是拜占庭式的。它已经足够古老,让你看了不到10分钟就尖叫着跑。我知道,我已经看过了:)