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

问题描述 投票:6回答:2

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

例如,对于以下比较 -

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;

我从CodeBlocks获得的输出是 -

0
0
0
0
0
0
0
c++ string comparison
2个回答
12
投票

代码的行为未定义。

你输入的const char[]文字为了比较而衰减到const char*指针。

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

如果您使用s后缀文字,例如"3"s然后C ++ 14以后会将其视为std :: string并执行词法比较。


8
投票

"3"不是一个“字符串”,它是const阵列的chars。 const char数组可以自动衰减到const char*。指针可以与operator<进行比较。

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


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

© www.soinside.com 2019 - 2024. All rights reserved.