我们可以在C ++中重载`==`运算符来比较两个字符串吗?

时间:2016-05-23 07:49:11

标签: c++ string operator-overloading

如果我们想在不使用strcmp()函数的情况下比较两个字符串,那么我们可以重载==运算符来比较两个字符串吗?

3 个答案:

答案 0 :(得分:9)

我想你的意思是用c风格的字符串重载$query = "SELECT * FROM patient_creation where patient_id like '$match' OR mobile like '$match1' OR name like '$match2' OR fathername like '$match3' OR address like '$match4' OR created BETWEEN '$match5' AND '$match6'"; $this->db->query($query); ,然后答案是operator overloading应该用于为用户定义类型的操作数自定义运算符。

从标准,$ 13.5 / 6重载运算符[over.oper](强调我的)

  

运算符函数应该是非静态成员函数或   是一个非成员函数,其中至少有一个类型为的参数   类,对类的引用,枚举或对引用的引用   枚举

请注意,如果您的意思是std::string,答案仍然是。 STL为operator==提供了operator==的实施,您无法对其进行修改。事实上,你根本不需要超载它,只需使用就可以了。

修改

如果你想为自己的课超重,那很好。如

std::string

然后

Class X {
    //...
};
bool operator==(const X& lhs, const X& rhs) { 
    // do the comparison and return the result
}

答案 1 :(得分:2)

是不是已经超载了?

#include<iostream>
#include<cstring>
int main()
{
    std::string a = "Ala";
    std::string b = "Ala";
    if(a==b)
        std::cout<<"same\n";
    else
        std::cout<<"but different\n";
}

上面的代码对我有用(CodeBlocks)

答案 2 :(得分:0)

我有另一种解决方案,可以减少您的后顾之忧。我刚刚编写了函数equal(a,b),该函数告诉您两个字符串是否相同(可以复制所有代码并在您的终端中对其进行测试):

#include <iostream>
#include <string>
using namespace std;

//PRE: Two strings.
//POST: True if they are equal. False if they are different. 
bool equal(const string& a, const string&b) {
    int len_a = a.length();
    int len_b = b.length();

    if (len_a != len_b) return false;

    //do this if they are equal
    for (int i = 0; i < len_a; ++i) {
        if (a[i] != b[i])   return false;
    }
    return true;
}



int main() {
    string a, b;
    cout << "Write two strings, with a space in between:" << endl;

    cin >> a >> b;
    if (equal(a,b))  cout << "they are equal" << endl;
    else            cout << "they are different" << endl;

}