可能重复:
有没有办法区分C ++文件?
我有很长的文本string,我想分歧和补丁。 给出了stringa和b:
string a = ...; string b = ...; string a_diff_b = create_patch(a,b); string a2 = apply_patch(a_diff_b,b); assert(a == a2);
如果a_diff_b是人类可读的,这将是一个奖金。
实现这一点的一种方法是使用system(3)从diffutils调用diff和patch shell命令并将它们传递给string。 另一种方法是自己实现这些function(我正在考虑以primefaces方式处理每一行,并使用标准的编辑距离n ^ 3algorithm逐行跟踪)。
_stricmp在string匹配时返回错误的值。 该怎么办?
当子模块存在时,Git差异会在Windows上崩溃
比较两个来自Windows的远程文件
我怎样才能比较3个文件(看看他们之间有什么共同点)?
我想知道是否有人知道一个好的Linux C或C ++库,可以做这个工作吗?
Bash:找出哪些行在两个文件之间没有改变
Unix – recursion比较两个目录,输出差异作为列表减去目录
如何使用diff比较两个目录而忽略不存在的文件?
你可以谷歌执行Myers Diff算法。 (“O(ND)差分算法及其变体”)或解决“最长公共子序列”问题的库。
据我所知,在C + + diff / patch的情况并不好 – 有几个库(包括diff match patch , libmba ),但根据我的经验,它们要么有点不好记录,要么有很大的外部依赖性例如,diff match patch需要Qt 4)或者专门用于你不需要的类型(例如,当你需要unicode时需要std :: string),或者不够通用,或者使用具有很高内存的通用算法要求((M + N)^ 2其中M和N是输入序列的长度)。
你也可以尝试自己实现迈尔斯算法((N + M)的内存需求),但问题的解决方案是非常难以理解的 – 期望至少浪费一周的时间阅读文档。 Myers算法的一些人类可读的解释可以在这里找到 。
我相信
https://github.com/cubicdaiya/dtl/wiki/Tutorial
可能有你需要的东西
http://code.google.com/p/google-diff-match-patch/
Diff Match和Patch库提供强大的算法来执行同步纯文本所需的操作。
目前可用Java,JavaScript,Dart,C ++,C#,Objective C,Lua和Python。 不管语言如何,每个库都具有相同的API和相同的功能。 所有版本也有全面的测试线束。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。