public member function
<string>

std::basic_string::compare

string (1)
int compare (const basic_string& str) const;
substrings (2)
int compare (size_type pos, size_type len, const basic_string& str) const;int compare (size_type pos, size_type len, const basic_string& str,             size_type subpos, size_type sublen) const;
c-string (3)
int compare (const charT* s) const;int compare (size_type pos, size_type len, const charT* s) const;
buffer (4)
int compare (size_type pos, size_type len, const charT* s, size_type n) const;
string (1)
int compare (const basic_string& str) const noexcept;
substrings (2)
int compare (size_type pos, size_type len, const basic_string& str) const;int compare (size_type pos, size_type len, const basic_string& str,             size_type subpos, size_type sublen) const;
c-string (3)
int compare (const charT* s) const;int compare (size_type pos, size_type len, const charT* s) const;
buffer (4)
int compare (size_type pos, size_type len, const charT* s, size_type n) const;
string (1)
int compare (const basic_string& str) const noexcept;
substrings (2)
int compare (size_type pos, size_type len, const basic_string& str) const;int compare (size_type pos, size_type len, const basic_string& str,             size_type subpos, size_type sublen = npos) const;
c-string (3)
int compare (const charT* s) const;int compare (size_type pos, size_type len, const charT* s) const;
buffer (4)
int compare (size_type pos, size_type len, const charT* s, size_type n) const;
比较字符串
basic_string 对象(或子字符串)的值与其参数指定的字符序列进行比较。

被比较的字符串basic_string 对象的值,或者 - 如果使用的签名具有 poslen 参数 - 是从位置 pos 的字符开始并跨越 len 个字符的子字符串。

此字符串与一个 比较字符串 进行比较,该字符串由传递给函数的其他参数确定。

这些序列使用 traits_type::compare 进行比较。

参数

str
另一个具有相同类型的basic_string对象(具有相同的类模板参数charT, 特性 (traits)Alloc),完全(或部分)用作比较字符串
pos
被比较字符串中第一个字符的位置。
如果它大于字符串长度,则抛出out_of_range
注意:第一个字符用值表示0(不是1).
len
被比较字符串的长度(如果字符串较短,则为尽可能多的字符)。
basic_string::npos值表示直到字符串末尾的所有字符。
subpos, sublen
与上面的 poslen 相同,但用于比较字符串
s
指向字符数组的指针。
如果指定了参数 n (4),则数组中的前 n 个字符用作比较字符串
否则 (3),预期为 null 终止的序列:要用作比较字符串的字符序列的长度由第一个 null 字符的出现确定。
n
要比较的字符数。

charTbasic_string 的字符类型(即,它的第一个模板参数)。
成员类型size_type是一种无符号整型类型。

返回值

返回一个有符号整数,指示字符串之间的关系
被比较字符串比较字符串之间的关系
0它们比较相等
<0被比较字符串中第一个不匹配的字符的值较低,或者所有比较的字符都匹配,但被比较字符串较短。
>0被比较字符串中第一个不匹配的字符的值较高,或者所有比较的字符都匹配,但被比较字符串较长。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// comparing apples with apples
#include <iostream>
#include <string>

int main ()
{
  std::string str1 ("green apple");
  std::string str2 ("red apple");

  if (str1.compare(str2) != 0)
    std::cout << str1 << " is not " << str2 << '\n';

  if (str1.compare(6,5,"apple") == 0)
    std::cout << "still, " << str1 << " is an apple\n";

  if (str2.compare(str2.size()-5,5,"apple") == 0)
    std::cout << "and " << str2 << " is also an apple\n";

  if (str1.compare(6,5,str2,4,5) == 0)
    std::cout << "therefore, both are apples\n";

  return 0;
}

输出
green apple is not red apple
still, green apple is an apple
and red apple is also an apple
therefore, both are apples


复杂度

未指定,但通常高达被比较的比较的字符串长度中的线性。

迭代器有效性

没有变化。

数据竞争

该对象被访问。

异常安全

强保证:如果抛出异常,basic_string 中没有变化(除了 (1),保证不会抛出异常)。

如果已知s未指向足够长的数组,会导致未定义行为

如果pos大于字符串长度,或者subpos大于str长度,则会抛出out_of_range异常。

另见