c++ - 比较字符串而不分配给变量时出现问题

标签 c++ string string-comparison

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/

相关文章:

c++ - 字符串类实现的差异

c# - 在 C# 中检测字符串中的重复单词时遇到问题?

c++ - 在 msvc 中引用临时文件

c++ - 用字符串中的空格替换符号

c++ - 将其 ASCII 的 int 转换为 String

java - 如何将 List<List<String>> 转换为 String[][]?

string - 读外国文字

java - 在 Java 中比较日期作为字符串

c++ - 如何在 C++ 中将 SFML 图像转换为 OpenCV mat?

c++ - 删除多维数组