C++ 比较条件中的字符串而不将其声明为字符串
以下条件显然是错误的C++ 比较条件中的字符串而不将其声明为字符串,c++,string-comparison,C++,String Comparison,以下条件显然是错误的 string e = "English", c = "Chemistry"; if (e < c) ... // this is False string e=“English”,c=“Chemistry”; 如果(e
string e = "English", c = "Chemistry";
if (e < c) ... // this is False
string e=“English”,c=“Chemistry”;
如果(e
但无论顺序如何,以下证明都是正确的:
if("English" < "Chemistry") ...//True
if("Chemistry" < "English") ... //also True
if(“English”<“Chemistry”)…//正确
如果(“化学”<“英语”)//同样正确
为什么会这样?我不明白上面两个条件怎么都是真的。比较的是指针的值。所以这取决于编译器 您需要使用strcmp或字符串的比较运算符。字符串文字只是“C-String”,即指向字符的指针。由于它们是指针,您可以对它们使用一些算术运算符,但如果您在不同的机器上运行程序,或者只运行几次,您可能会得到不同的答案 如果要比较两个
std::string
,可以使用以下内容:
if (std::string("English") < "Chemistry")
if(标准::字符串(“英语”)<“化学”)
请注意,至少有一个字符串必须是std::string“English”
具有类型const char[]
,该类型衰减为类型char const*
:也就是说,它实际上是指向存储初始E
的内存位置的指针
当你写作时
string e = "English"
您正在隐式调用由类型string
定义的转换构造函数,该构造函数接受char*
并创建字符串
:
string e("English")
在这一点上,e
等价于e操作符
strcmp("English", "Chemistry") < 0 // false: English is not less than Chemistry