比较字符串,c ++

时间:2014-07-25 14:22:14

标签: c++ string comparison

我有一个问题:

假设有两个std::string,我想比较它们,可以选择使用compare()类的string函数,但我也注意到它是可能的使用简单的< > !=运算符(即使我不包含<string>库,这两种情况都是可能的)。 如果可以使用简单的运算符进行比较,有人可以解释为什么存在compare()函数吗?

btw我使用Code :: Blocks 13.12 这是我的代码示例:

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::getline;

int main()
{
    string temp1, temp2;
    cout << "Enter first word: ";
    getline (cin,temp1);
    cout << "Enter second word: ";
    getline (cin,temp2);
    cout << "First word: " << temp1 << endl << "Second word: " << temp2 << endl;
    if (temp1 > temp2)
    {
        cout << "One" << endl;
    }
    if (temp1.compare(temp2) < 0)
    {
        cout << "Two" << endl;
    }
    return 0;
}    

3 个答案:

答案 0 :(得分:25)

.compare()返回一个整数,它是两个字符串之间差异的度量。

  • 返回值0表示两个字符串比较相等。
  • 正值表示比较的字符串较长,或者第一个不匹配的字符较大。
  • 负值表示比较的字符串较短,或第一个不匹配的字符较低。

operator==只返回一个布尔值,表示字符串是否相等。

如果您不需要额外的细节,也可以使用==

答案 1 :(得分:3)

string cat = "cat";
string human = "human";

cout << cat.compare(human) << endl; 

此代码将给出-1作为结果。这是由于比较字符串的第一个不匹配字符&#39; h&#39;较低或出现在&#39; c&#39;按字母顺序排列,即使比较字符串,“人类”也是如此。比猫还要长。

我发现cplusplus.com中描述的返回值更准确,它们是 - :

  

0:他们比较相等

     

&lt; 0:不匹配的第一个字符的值在比较字符串中较低,或者所有比较的字符匹配但比较的字符串较短。

     

大于0:比较字符串中不匹配的第一个字符的值更大,或者所有比较的字符匹配但比较的字符串更长。

此外,IMO cppreference.com的描述更简单,到目前为止最符合我自己的经验。

  

负值如果*this出现在参数指定的字符序列之前,则按字典顺序

     如果两个字符序列都比较等价

,则

为零      

正值如果*this出现在参数指定的字符序列之后,则按字典顺序

答案 2 :(得分:1)

关于问题

  

如果可以使用简单的操作数进行比较,有人可以解释为什么存在compare()函数吗?

相对于<==compare函数在概念上更简单,并且在实践中可以更高效,因为它避免了每个项目的两次比较普通的物品订购。


作为简单的一个例子,对于小整数值,您可以编写如下的比较函数:

auto compare( int a, int b ) -> int { return a - b; }

效率很高。

现在是一个结构

struct Foo
{
    int a;
    int b;
    int c;
};

auto compare( Foo const& x, Foo const& y )
    -> int
{
    if( int const r = compare( x.a, y.a ) ) { return r; }
    if( int const r = compare( x.b, y.b ) ) { return r; }
    return compare( x.c, y.c );
}

相对而言,试图用<直接表达这种词典比较,结果是可怕的复杂性和低效率。


使用C ++ 11时,为简单起见,普通的基于比较的词典比较可以非常简单地在元组比较中实现。