2013-12-13 2 views
1

это подстроки (2) int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const; мой лучший выбор для сравнения двух подстрок, если у меня есть их пары begin, end итераторы.std string сравнить две подстроки итераторами

Это то, что я должен сделать, кажется, откусил:

str1.compare(begin2 - str2.begin(), end2 - begin2, str2, 
      begin1 - str1.begin(), end1 - begin1) 
+1

Do вы просто хотите знать, являются ли подстроки равными/не равными или вы хотите сравнить их, чтобы получить «меньшее» из 2? –

+2

Чтобы развернуть этот комментарий, см. Документацию для 'std :: equal' и' std :: mismatch' – Chad

+0

@ Когда вы украли мой гром ... это то, куда я направлялся :) –

ответ

3

Если вы сравниваете подстроки для равенства, вы могли бы использовать std::equal вместо этого, как это:

bool res = ((end1-begin1) == (end2-begin2)) 
     && std::equal(begin1, end1, begin2, end2); 

Вам нужно сравнить длины для равенства перед вызовом std::equal, чтобы избежать прохождения конца второго диапазона. Эта проблема решена в C++ 14 - вы могли бы сделать это просто как

bool res = std::equal(begin1, end1, begin2, end2); 

Если вы сравниваете подстроки лексически, вы можете использовать std::lexicographical_compare, как это:

bool firstIsLess = std::lexicographical_compare(begin1, end1, begin2, end2); 
+0

+1: Как это должно быть сделано. –

Смежные вопросы