作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经为 C++ Qt 下载了 google diff 库。
https://code.google.com/archive/p/google-diff-match-patch/
但我真的不明白如何使用它来简单比较两个字符串。假设我有两个 QString。
QString str1="Stackoverflow"
QString str2="Stackrflow"
据我了解,我需要创建 diff_match_match 类的 dmp 对象,然后调用比较方法。那么我该怎么做才能拥有例如“ove has deleted from 5 position”。
最佳答案
使用说明在 API wiki 中和 diff_match_patch.h .
位置不包含在 Diff 对象中。要获取它,您可以遍历列表并计算更改位置:
即像这样(未经测试):
auto diffResult = diff_main(str1, str2);
int equalLength = 0;
int deleteLength = 0;
bool lastDeleteLength = 0; // for undoing position offset for replacements
for (const auto & diff : diffResult) {
if (diff.operation == Operation.EQUAL) {
equalLength += diff.text.length();
lastDeleteLength = 0;
}
else if (diff.operation == Operation.INSERT) {
pos = equalLength + deleteLength - lastDeleteLength;
qDebug() << diff.toString() << "at position" << pos;
lastDeleteLength = 0;
}
else if (diff.operation == Operation.DELETE) {
qDebug() << diff.toString() << "at position" << equalLength + deleteLength;
deleteLength += diff.text.length();
lastDeleteLength = diff.text.length();
}
}
关于c++ - 如何在 C++ QT 中使用 google-diff-match-patch 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47375116/
我是一名优秀的程序员,十分优秀!