A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://en.cppreference.com/w/cpp/language/../language/../string/basic_string/compare.html below:

std::basic_string<CharT,Traits,Allocator>::compare - cppreference.com

int compare( const basic_string& str ) const;

(1) (noexcept since C++11)
(constexpr since C++20)

int compare( size_type pos1, size_type count1,
             const basic_string& str ) const;

(2) (constexpr since C++20) (3) int compare( size_type pos1, size_type count1,

             const basic_string& str,

             size_type pos2, size_type count2 ) const;
(until C++14) int compare( size_type pos1, size_type count1,

             const basic_string& str,

             size_type pos2, size_type count2 = npos ) const;
(since C++14)
(constexpr since C++20)

int compare( const CharT* s ) const;

(4) (constexpr since C++20)

int compare( size_type pos1, size_type count1,
             const CharT* s ) const;

(5) (constexpr since C++20)

int compare( size_type pos1, size_type count1,
             const CharT* s, size_type count2 ) const;

(6) (constexpr since C++20)

template< class StringViewLike >
int compare( const StringViewLike& t ) const noexcept(/* see below */);

(7) (since C++17)
(constexpr since C++20) template< class StringViewLike >

int compare( size_type pos1, size_type count1,

             const StringViewLike& t ) const;
(8) (since C++17)
(constexpr since C++20) template< class StringViewLike >

int compare( size_type pos1, size_type count1,
             const StringViewLike& t,

             size_type pos2, size_type count2 = npos) const;
(9) (since C++17)
(constexpr since C++20)

Compares two character sequences.

1) Compares this string to str.

2)

Compares a

[pos1pos1 + count1)

substring of this string to

str

.

3)

Compares a

[pos1pos1 + count1)

substring of this string to a substring

[pos2pos2 + count2)

of

str

.

4) Compares this string to the null-terminated character sequence beginning at the character pointed to by s with length Traits::length(s).

5)

Compares a

[pos1pos1 + count1)

substring of this string to the null-terminated character sequence beginning at the character pointed to by

s

with length

Traits::length(s)

.

6)

Compares a

[pos1pos1 + count1)

substring of this string to the characters in the range

[ss + count2)

. The characters in

[ss + count2)

may include null characters.

7) compares this string to sv;

8)

compares a

[pos1pos1 + count1)

substring of this string to

sv

, as if by

std::basic_string_view<CharT, Traits>(*this).substr(pos1, count1).compare(sv)

;

9)

compares a

[pos1pos1 + count1)

substring of this string to a substring

[pos2pos2 + count2)

of

sv

, as if by

std::basic_string_view<CharT, Traits>(*this)
    .substr(pos1, count1).compare(sv.substr(pos2, count2))

.

A character sequence consisting of count1 characters starting at data1 is compared to a character sequence consisting of count2 characters starting at data2 as follows:

Condition Result Return value Traits::compare(data1, data2, rlen) < 0 data1 is less than data2 <0 Traits::compare(data1, data2, rlen) == 0 size1 < size2 data1 is less than data2 <0 size1 == size2 data1 is equal to data2 ​0​ size1 > size2 data1 is greater than data2 >0 Traits::compare(data1, data2, rlen) > 0 data1 is greater than data2 >0 [edit] Parameters str - other string to compare to s - pointer to the character string to compare to count1 - number of characters of this string to compare pos1 - position of the first character in this string to compare count2 - number of characters of the given string to compare pos2 - position of the first character of the given string to compare t - object (convertible to std::basic_string_view) to compare to [edit] Return value [edit] Exceptions

The overloads taking parameters named pos1 or pos2 throws std::out_of_range if the argument is out of range.

If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).

[edit] Possible implementation overload (1)
template<class CharT, class Traits, class Alloc>
int std::basic_string<CharT, Traits, Alloc>::compare
    (const std::basic_string& s) const noexcept
{
    size_type lhs_sz = size();
    size_type rhs_sz = s.size();
    int result = traits_type::compare(data(), s.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;
}
[edit] Notes

For the situations when three-way comparison is not required, std::basic_string provides the usual relational operators (<, <=, ==, >, etc).

By default (with the default std::char_traits), this function is not locale-sensitive. See std::collate::compare for locale-aware three-way string comparison.

[edit] Example
#include <cassert>
#include <iomanip>
#include <iostream>
#include <string>
#include <string_view>
 
void print_compare_result(std::string_view str1,
                          std::string_view str2,
                          int compare_result)
{
    if (compare_result < 0)
        std::cout << std::quoted(str1) << " comes before "
                  << std::quoted(str2) << ".\n";
    else if (compare_result > 0)
        std::cout << std::quoted(str2) << " comes before "
                  << std::quoted(str1) << ".\n";
    else
        std::cout << std::quoted(str1) << " and "
                  << std::quoted(str2) << " are the same.\n";
}
 
int main()
{
    std::string batman{"Batman"};
    std::string superman{"Superman"};
    int compare_result{0};
 
    // 1) Compare with other string
    compare_result = batman.compare(superman);
    std::cout << "1) ";
    print_compare_result("Batman", "Superman", compare_result);
 
    // 2) Compare substring with other string
    compare_result = batman.compare(3, 3, superman);
    std::cout << "2) ";
    print_compare_result("man", "Superman", compare_result);
 
    // 3) Compare substring with other substring
    compare_result = batman.compare(3, 3, superman, 5, 3);
    std::cout << "3) ";
    print_compare_result("man", "man", compare_result);
 
    // Compare substring with other substring
    // defaulting to end of other string
    assert(compare_result == batman.compare(3, 3, superman, 5));
 
    // 4) Compare with char pointer
    compare_result = batman.compare("Superman");
    std::cout << "4) ";
    print_compare_result("Batman", "Superman", compare_result);
 
    // 5) Compare substring with char pointer
    compare_result = batman.compare(3, 3, "Superman");
    std::cout << "5) ";
    print_compare_result("man", "Superman", compare_result);
 
    // 6) Compare substring with char pointer substring
    compare_result = batman.compare(0, 3, "Superman", 5);
    std::cout << "6) ";
    print_compare_result("Bat", "Super", compare_result);
}

Output:

1) "Batman" comes before "Superman".
2) "Superman" comes before "man".
3) "man" and "man" are the same.
4) "Batman" comes before "Superman".
5) "Superman" comes before "man".
6) "Bat" comes before "Super".
[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior LWG 5 C++98 the parameter count2 of overload (6)
had a default argument npos default argument removed,
split to overloads (5) and (6) LWG 847 C++98 there was no exception safety guarantee added strong exception safety guarantee LWG 2946 C++17 overload (7) caused ambiguity in some cases avoided by making it a template P1148R0 C++17 noexcept for overload (7) was accidentally
dropped by the resolution of LWG2946 restored [edit] See also

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4