以下条件显然是假的
string e = "English", c = "Chemistry";
if (e < c) ... // this is False
但无论任何顺序如下,以下证明均属实:
if("English" < "Chemistry") ...//True
if("Chemistry" < "English") ... //also True
为什么它会像这样?我不明白上述两个条件是如何成真的。
答案 0 :(得分:0)
它是被比较的指针的值。所以它取决于编译器。
您需要使用strcmp
或字符串的比较运算符。
答案 1 :(得分:0)
字符串文字只是“C字符串”,它是指向char的指针。由于它们是指针,你可以在它们上使用一些算术运算符,但如果你在不同的机器上运行你的程序,或者只是几次,你可能得到不同的答案。
如果你想比较两个std::string
,你可以使用这些内容:
if (std::string("English") < "Chemistry")
请注意,至少在字符串上必须是std::string
。
答案 2 :(得分:0)
"English"
的类型为const char[]
,它会衰减为char const *
:也就是说,它实际上是指向存储初始E
的内存位置的指针。 / p>
写作时
string e = "English"
您隐含地调用由类型string
定义的转化构造函数,它需要char *
并创建string
:
string e("English")
此时,e < c
相当于e.operator<(c)
,实际上会调用string.operator<
并执行字符串比较。
但是当你直接比较"English"
和"Chemistry"
时,你没有任何string
个对象,所以你实际上只是比较指针 - 内存位置 - 结果是不可预知的。相反,您需要使用标准strcmp
函数:
strcmp("English", "Chemistry") < 0 // false: English is not less than Chemistry