情况:
我有一个或多个绝对路径,例如:
如何区分两条路径?假设我想知道如何从路径1到路径2.预期结果将是
/ home / benjamin / test / a / 1 - / home / benjamin / test / = / a / 1
是否有比彼此减去字符串更优雅的方式?
答案 0 :(得分:2)
我会尝试使用std::mismatch
(documentation)
template <class InputIterator1, class InputIterator2>
pair<InputIterator1, InputIterator2>
mismatch (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2 );
Return first position where two ranges differ
将范围[first1,last1)
中的元素与从first2
开始的范围内的元素进行比较,并返回第一个不匹配发生的位置。
一些代码:
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 );
}
在键盘上上传full example with outpu。
答案 1 :(得分:1)
我不知道调用xxxx(...)方式,但由于文件路径是树,我原本认为tree traversal algorithm会像它一样优雅......
this question中有些内容。
答案 2 :(得分:1)
您可以使用简单的正则表达式执行此操作:
return($1) if longer =~ /^#{shorter}(.*)$/
这是complete example in Ruby。您可以在命令行中对其进行测试并开始使用它,或者此代码可以让您了解如何使用C ++编写正则表达式。
答案 3 :(得分:0)
答案 4 :(得分:0)
假设您并不担心像/home/benjamin/test/c/..
这样的事情,那么这就变成了一个简单的子串匹配练习。
最懒的方式是使用像std::string::find
这样的东西。或者,稍微循环遍历两个字符串直到它到达一个字符串的结尾,或者找到字符差异。