int i = ("aac" > "aab");
cout << i;
上面的代码没有给我输出 1(它应该是这样)。但是,当我将“aac”和“aab”分配给两个单独的字符串变量并使用这些变量而不是直接使用字符串(下面附有代码)时,我得到了所需的输出。
有人可以帮我吗?
string s1 = "aac";
string s2 = "aab";
int i = (s1 > s2);
cout << i;
最佳答案
诸如“aac”之类的文字常量不是 std::string
对象;相反,它们只是(只读)内存中的数据,在大多数“访问”情况下评估其第一个元素的地址(即 char*
指针);因此,它们之间的比较将是这些地址之间的比较 - 这是您不可能控制或预测的。
要获得内联比较,在您的情况下,您可以使用内联 std::string
构造函数(有时称为“包装器”) ),像这样:
int i=(string("aac")>string("aab"));
或者,使用更“现代”的“大括号”初始化语法:
int i = (string{ "aac" } > string{ "aab" });
为了更简洁,您可以利用 std::string
具有 >
(和类似)运算符的版本,这些运算符将字符串文字作为一个论点;因此,您只需要“包装”其中一个文字,并且可以将上述代码简化为如下所示:
int i = (string{ "aac" } > "aab");
关于c++ - 比较字符串而不分配给变量时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65409118/