std字符串通过迭代器比较两个子字符串

std string compare two sub strings by iterators

本文关键字:字符串 两个 比较 迭代器 std      更新时间:2023-10-16

如果两个子字符串由成对的begin, end迭代器组成,那么这个子字符串(2)int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;是比较两个子字符串的最佳选择吗。

这是我必须做的吗,似乎有点偏离:

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

如果比较子字符串是否相等,可以使用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);