如何比较字符串形式的临时变量?

时间:2019-05-29 06:55:52

标签: c++

我想知道两个结果为什么不同吗?

代码是:

string s1="35",s2="255";
cout<<(s1>s2)<<" "<<("35">"255")<<endl;

输出为:

1 0

3 个答案:

答案 0 :(得分:5)

C ++中的文字字符串实际上是常量字符的数组。与其他数组一样,它们衰减到指向第一个元素的指针。

使用"35">"255",您比较指针,而不是字符串本身的内容。

要比较文字字符串,您需要使用std::strcmp。但是请注意,它不会返回布尔值。

您当前的工作大致等同于

char const* a = "35";
char const* b = "255";
std::cout << (&a[0] > &b[0]) << '\n';  // Print the result of comparing the *pointers*

通过s1>s2,您正在调用std::string的{​​{3}}功能。表达式s1 > s2等效于s1.operator>(s2)

答案 1 :(得分:2)

因为“ 35”和“ 255”不是std :: string,所以它是const char [](即,字符数组)。声明s1和s2时,const char []会转换为std :: string,因为s1和s2的类型是std :: string,但是不会自动执行此操作。

运行cout << (s1>s2) << " " << (string("35") > string("255")) << endl应该可以正常工作。

答案 2 :(得分:1)

您可以使用strcmp(),该函数根据字符串的比较结果返回正值或负值。
在此处查看手册:strcmp()

请注意,它使用 const char *而不是字符串作为参数。