有点模糊的问题,但我正在寻找关于如何在C ++中生成String diff向量的指针。这个场景是这样的,给定一个段落我想存储各种差异(编辑,剪切复制粘贴等),它会以草稿模式进行审核审核历史记录。
这方面的任何提示都将非常感激。
答案 0 :(得分:4)
使用C ++多态的想法:
class Action
{
public:
virtual void revert(std::string& base) = 0;
};
class InsertAction : public Action
{
private:
int pos, len;
public:
InsertAction(int pos, std::string& base, const std::string& in) : len(in.size()), pos(pos)
{
base.insert(pos, in);
}
virtual void revert(std::string& base)
{
base.erase(pos,len);
}
};
int main()
{
std::string text("hello !");
std::cout << text << std::endl;
Action* action = new InsertAction(5, text, " world");
std::cout << text << std::endl;
action->revert(text);
std::cout << text << std::endl;
delete action;
}
然后,您可以根据需要从LIFO队列添加和弹出Actions。这是一个简单的例子,你也可以尝试将它更多地链接到一个字符串,而不是总是作为一个参数传递,但这取决于你自己的设计。我知道这不是“真正的”差异,但我认为这个解决方案更接近问题,然后真正存储一般的字符串差异。