Я бы попробовал использовать std::mismatch
( документация )
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 );
}
A полный пример с outpu t загружен на кодовую панель.