如果我们想在不使用strcmp()
函数的情况下比较两个字符串,那么我们可以重载==
运算符来比较两个字符串吗?
答案 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;
}