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

时间:2017-12-20 18:14:23

标签: 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;

我从CodeBlocks获得的输出是 -

0
0
0
0
0
0
0

2 个答案:

答案 0 :(得分:12)

代码的行为未定义。

为了进行比较,您输入的update_idletasks()个文字会衰减到const char[]个指针。

指针上的比较运算符的行为仅在指针是同一数组的一部分时定义;你的不是。

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

答案 1 :(得分:8)

"3"不是“字符串”,它是const的{​​{1}}数组。 char数组可以自动衰减到const char。可以将指针与const char*进行比较。

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

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