Пространства имён
Варианты
Действия

std::basic_string<CharT,Traits,Allocator>::compare

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
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,

             size_type pos2, size_type count2 ) const;
(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)
спецификация noexcept:  
noexcept
  

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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]