我想知道两个结果为什么不同吗?
代码是:
string s1="35",s2="255";
cout<<(s1>s2)<<" "<<("35">"255")<<endl;
输出为:
1 0
答案 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 *而不是字符串作为参数。