gpt4 book ai didi

c++ - 如何在 C++ QT 中使用 google-diff-match-patch 库?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:14 24 4
gpt4 key购买 nike

我已经为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com