2013-12-13 83 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

待辦事項你只是想知道子串是否相等/不相等,或者你想比較它們以得到2的「較小」? –

+2

要擴大上述評論,請參閱'std :: equal'和'std :: mismatch'的文檔。 – Chad

+0

@Chad你偷走了我的雷霆......那是我的標題:) –

回答

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:它應該如何完成。 –