C++ 获取路径”;差异“;在两个目录之间

C++ 获取路径”;差异“;在两个目录之间,c++,directory,filesystems,C++,Directory,Filesystems,情况: 我有一个或多个绝对路径,例如: /家庭/本杰明/测试/ /home/benjamin/test/a/1 /首页/本杰明/测试/b/1 我如何才能得到两条路径之间的差异?假设我想知道如何从路径1到路径2。预期结果将是 /home/benjamin/test/a/1-/home/benjamin/test/=/a/1 还有比从字符串中减去字符串更优雅的方法吗?我不知道调用xxxx(…)的方法,但由于文件路径是树,我原以为a会非常优雅 这里有一些东西。您可以将所有路径插入到中,然后查看剩余的后

情况:

我有一个或多个绝对路径,例如:

  • /家庭/本杰明/测试/
  • /home/benjamin/test/a/1
  • /首页/本杰明/测试/b/1
  • 我如何才能得到两条路径之间的差异?假设我想知道如何从路径1到路径2。预期结果将是

    /home/benjamin/test/a/1-/home/benjamin/test/=/a/1

    还有比从字符串中减去字符串更优雅的方法吗?

    我不知道调用xxxx(…)的方法,但由于文件路径是树,我原以为a会非常优雅


    这里有一些东西。

    您可以将所有路径插入到中,然后查看剩余的后缀

    更一般的方法是使用,并回溯最小编辑距离的步骤


    在我看来,两者都更优雅。但是,首先减去字符串有什么问题?

    假设您不担心
    /home/benjamin/test/c/。
    ,那么这就变成了一个简单的子字符串匹配练习


    最懒惰的方法是使用类似的东西。或者,在两个字符串上循环一小段时间,直到到达一个字符串的末尾,或者找到字符差异。

    我会尝试使用
    std::mismatch
    ()


    t在代码板上上传。

    您可以使用一个简单的正则表达式:

    return($1) if longer =~ /^#{shorter}(.*)$/
    
    这是一本书。您可以在命令行中测试它,并开始使用它,或者这个代码可以告诉您如何在C++中编写ReXEP。
    string
    mismatch_string( string const & a, string const & b ) {
    
        string::const_iterator longBegin, longEnd, shortBegin;
    
        if( a.length() >= b.length() ) {
            longBegin = a.begin();
            longEnd = a.end();
            shortBegin = b.begin();
        }
        else {
            longBegin = b.begin();
            longEnd = b.end();
            shortBegin = a.begin();
        }
    
        pair< string::const_iterator, string::const_iterator > mismatch_pair = 
            mismatch( longBegin, longEnd, shortBegin );
    
        return string(  mismatch_pair.first, longEnd );
    }
    
    return($1) if longer =~ /^#{shorter}(.*)$/