以下代码的输出为什么不同?
我正在比较两个字符串。我不明白他们为什么给出不同的输出?
代码1:
#include <bits/stdc++.h>
using namespace std;
int main() {
if("35" <= "255")
{
cout << 1;
}
cout << 0;
}
代码2:
#include <bits/stdc++.h>
using namespace std;
int main() {
string num = "35";
if(num <= "255")
{
cout << 1;
}
cout << 0;
}
代码1的输出为10。代码2的输出为0。
答案 0 :(得分:3)
您使用std::string
使第二个程序与众不同。
std::string
对于比较运算符来说是重载的,它按字典顺序比较操作数的内容。词典顺序与数字顺序不同,词典中使用的顺序与数字顺序相同:255早于35(即“小于”)35,就像土豚在动物园之前一样。
另一方面,字符串文字是数组,它将衰减为指向第一个元素的指针,并且指针比较将比较内存中的相对位置,这与文本内容无关,在这种情况下为最好未指定,您可能看不到1个输出。
答案 1 :(得分:0)
字符串不是魔术对象,它不能理解字符串中包含的内容并对其执行不同的操作。
在您的情况下,您正在比较包含一个字符缓冲区(包含“ 3”,“ 5”,0)的地址与包含另一个字符缓冲区(包含“ 2”,“ 3”,“ 5”的地址)的地址',0)。
输出是随机的(实际上不是,但是现在让我们假设是)。
如果要比较字符串,可以使用第二个示例(或strcmp
),但这将根据一些逻辑规则(而不是您所希望的逻辑规则)来比较缓冲区内容(您希望语义逻辑,但是不是)。
规则是:
<
运算符,则返回-1,则返回true,否则返回false,依此类推)在前面的示例中,“ 3”高于“ 2”(即使35小于235)。
在比较(并处理潜在的转换错误)之前,您需要将字符串转换为整数,或者从一开始就使用整数。
答案 2 :(得分:0)
首先将字符串转换为Int,然后进行比较。
示例:
#include <iostream>
using std::cout;
string value1 = "22";
string value2 = "222";
int main()
{
if(std::stoi(value1)<=std::stoi(value2))
{
cout<<"1";
}
cout<<"0";
}