如果字符串是数字,字符串的比较运算符如何在C++中工作?

Viv*_*mar 6 c++ string comparison

请告诉我,如果字符串是数字且数字位数相同,那么运算符对字符串的工作量是多少.这些操作符究竟如何工作?

例如,对于以下比较 -

cout<<("3" > "5")<<endl;
cout<<("31" > "25")<<endl;
cout<<("35" > "35")<<endl;
cout<<("38" > "85")<<endl;
cout<<("53" > "55")<<endl;
cout<<("36" > "35")<<endl;
cout<<("53" > "54")<<endl;
Run Code Online (Sandbox Code Playgroud)

我从CodeBlocks获得的输出是 -

0
0
0
0
0
0
0
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 12

代码的行为未定义.

const char[]您输入的文字会因为const char*比较而衰减到指针.

并且仅当指针是同一数组的一部分时,才会定义指针上的比较运算符的行为.你的不是.

如果你使用s后缀文字,例如 "3"sC++ 14以后将把它视为std :: string并执行词法比较.


Vit*_*meo 8

"3"它不是一个"字符串",它是一个s const数组char.const char数组可以自动衰减到const char*.指针可以与之比较operator<.

指针的比较只是地址之间的比较.在这种特殊情况下,您的比较会导致未定义的行为,因为指针彼此之间是不相关的(它们不指向属于同一数组的对象).


如果你真的想按字典顺序比较C风格的字符串,请使用std::strcmp.否则,你应该使用std::string和依赖std::string::operator<.