如何生成字符串差异向量?

时间:2010-04-14 11:28:03

标签: c++

有点模糊的问题,但我正在寻找关于如何在C ++中生成String diff向量的指针。这个场景是这样的,给定一个段落我想存储各种差异(编辑,剪切复制粘贴等),它会以草稿模式进行审核审核历史记录。

这方面的任何提示都将非常感激。

1 个答案:

答案 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。这是一个简单的例子,你也可以尝试将它更多地链接到一个字符串,而不是总是作为一个参数传递,但这取决于你自己的设计。我知道这不是“真正的”差异,但我认为这个解决方案更接近问题,然后真正存储一般的字符串差异。