无论情况如何,字符串比较的小于运算符都会产生相同的结果
Less Than operator on string comparison yields same result no matter the situation
我想看看小于运算符 (<
) 是否适用于字符串。好吧,确实如此。我开始试验它,事实证明,无论情况如何,我都得到了相同的结果。左边的字符串总是小于右边的字符串,即使我交换了字符串。好奇它为什么这样做,我试图查找 <
运算符实际上对字符串做了什么。我读到它对两个字符串进行了字典顺序比较。尽管如此,这并没有回答为什么我的代码正在做它正在做的事情。例如:
int main () {
if ("A" < "B")
std::cout << "Yes";
else
std::cout << "No";
return 0;
}
它会输出Yes
。这就说得通了。但是当我交换字符串时:
int main () {
if ("B" < "A")
std::cout << "Yes";
else
std::cout << "No";
return 0;
}
它仍然会输出Yes
。我不知道我现在是否只是无知而没有完全理解这里发生的事情,或者是否有问题。
这是因为字符串文字为您提供了一个指向包含该字符串(及其终止符)的只读数组的指针。您要比较的不是字符串,而是指向这些字符串的 指针 。
使用定义了重载比较运算符的 std::strcmp
if you want to compare C-style strings. Or use std::string
。
您正在将指向字符串 "A" 的指针与指向字符串 "B" 的指针进行比较。
如果你只想比较字符中的值,那么使用单引号 'A' 和 'B',如果你想比较字符串,那么使用 std::string class std::string("A") < std::string("B")
或 strcmp()
我想看看小于运算符 (<
) 是否适用于字符串。好吧,确实如此。我开始试验它,事实证明,无论情况如何,我都得到了相同的结果。左边的字符串总是小于右边的字符串,即使我交换了字符串。好奇它为什么这样做,我试图查找 <
运算符实际上对字符串做了什么。我读到它对两个字符串进行了字典顺序比较。尽管如此,这并没有回答为什么我的代码正在做它正在做的事情。例如:
int main () {
if ("A" < "B")
std::cout << "Yes";
else
std::cout << "No";
return 0;
}
它会输出Yes
。这就说得通了。但是当我交换字符串时:
int main () {
if ("B" < "A")
std::cout << "Yes";
else
std::cout << "No";
return 0;
}
它仍然会输出Yes
。我不知道我现在是否只是无知而没有完全理解这里发生的事情,或者是否有问题。
这是因为字符串文字为您提供了一个指向包含该字符串(及其终止符)的只读数组的指针。您要比较的不是字符串,而是指向这些字符串的 指针 。
使用定义了重载比较运算符的 std::strcmp
if you want to compare C-style strings. Or use std::string
。
您正在将指向字符串 "A" 的指针与指向字符串 "B" 的指针进行比较。
如果你只想比较字符中的值,那么使用单引号 'A' 和 'B',如果你想比较字符串,那么使用 std::string class std::string("A") < std::string("B")
或 strcmp()