std::basic_string::compare
int compare( const basic_string& str ) const; |
(1) | |
int compare( size_type pos1, size_type count1, const basic_string& str ) const; |
(2) | |
int compare( size_type pos1, size_type count1, const basic_string& str, |
(3) | |
int compare( const CharT* s ) const noexcept; |
(4) | |
int compare( size_type pos1, size_type count1, const CharT* s ) const; |
(5) | |
int compare( size_type pos1, size_type count1, const CharT* s, size_type count2 ) const; |
(6) | |
Сравнение двух последовательностей символов.
1) Сравнивает данную строку со str. В первую очередь вычисляется количество символов для сравнения, по принципу size_type rlen = std::min(size(), str.size()). Далее для сравнения вызывается Traits::compare(data(), str.data(), rlen). Для обычных строк данная функция выполняет посимвольное лексикографическое сравнение. Если результат равен нулю (строки на текущий момент равны), то размеры строк дополнительно сравниваются следующим образом:
Условие | Результат | Возвращаемое значение | |
---|---|---|---|
Traits::compare(data, arg, rlen) < 0
|
data меньше, чем arg | <0 | |
Traits::compare(data, arg, rlen) == 0
|
size(data) < size(arg)
|
data меньше, чем arg | <0 |
size(data) == size(arg)
|
data равно arg | 0 | |
size(data) > size(arg)
|
data больше, чем arg | >0 | |
Traits::compare(data, arg, rlen) > 0
|
data больше, чем arg | >0 |
2) Сравнивает подстроку [pos1, pos1+count1)
данной строки со str, по принципу basic_string(*this, pos1, count1).compare(str)
3) Сравнивает подстроку [pos1, pos1+count1)
данной строки с подстрокой [pos2, pas2+count2)
str, по принципу basic_string(*this, pos1, count1).compare(basic_string(str, pos2, count2))
4) Сравнивает данную строку со строкой с завершающим нулевым символом, начиная с символа, на который указывает s, по принципу compare(basic_string(s))
5) Сравнивает подстроку [pos1, pos1+count1)
данной строки со строкой с завершающим нулевым символом, начиная с символа, на который указывает s, по принципу basic_string(*this, pos, count1).compare(basic_string(s))
6) Сравнивает подстроку [pos1, pos1+count1)
данной строки с count2
первыми символами массива символов, на первый символ которого указывает s, по принципу basic_string(*this, pos, count1).compare(basic_string(s, count2)). (Примечание: символы, начиная с s
по s+count2
могут включать нулевые символы)
Содержание |
[править] Параметры
str | - | строка, с которой будет проведено сравнение |
s | - | указатель на строку символов, с которой будет проведено сравнение |
count1 | - | количество символов данной строки для сравнения |
pos1 | - | позиция первого символа в данной строке, с которого начнется сравнение |
count2 | - | количество символов переданной строки для сравнения |
pos2 | - | позиция первого символа в переданной строке, с которого начнется сравнение |
[править] Возвращаемое значение
отрицательное значение, если данная строка меньше, чем переданная последовательность символов, ноль, если обе последовательности символов равны, положительное значение, если данная строка больше, чем переданная последовательности символов.
[править] Исключения
1)2-6) Может генерировать исключения, которые генерирует соответствующий конструктор basic_string
.
[править] Возможная реализация
template<class CharT, class Traits, class Alloc> int basic_string<CharT, Traits, Alloc>::compare(const std::basic_string& str) const noexcept { size_type lhs_sz = size(); size_type rhs_sz = str.size(); int result = traits_type::compare(data(), str.data(), std::min(lhs_sz, rhs_sz)); if (result != 0) return result; if (lhs_sz < rhs_sz) return -1; if (lhs_sz > rhs_sz) return 1; return 0; } |
[править] Пример
Этот раздел не завершён Причина: нет примера |
[править] См. также
лексикографическое сравнение двух строк (шаблон функции) | |
возвращает подстроку (public функция-член) | |
определяет лексикографическое сравнение и правила хэширования строк (шаблон класса) | |
сравнивает две строки в соответствии с текущей локали Оригинал: compares two strings in accordance to the current locale Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |