C++ 字符 - 关系运算符

C++ Char - Relational Operators

本文关键字:运算符 关系 字符 C++      更新时间:2023-10-16

我在C++中使用字符时遇到了一点问题,因为我尝试在 if 中比较 2 个文本,这就是我得到的:

输入:

if ( "bac" < "ab" ) cout<<"1";
if ( "ab" > "bac" ) cout<<"1";

输出:

11

我真的不明白为什么它打印"11",但此外,如果我擦除第一个"如果",它将不再在屏幕上打印任何内容。您能否解释一下为什么它对这些IF有这样的行为?

`if("abc" < "bcd" );

这相当于:

char* a= "abc";
char* b ="bcd";
if( a < b );

ab是指针,是内存中的地址。因此,无论两个字符串中有什么,它们都位于内存中的不同位置。这意味着无论两个字符串的内容如何,a永远不会等于b

当您"abc"时,您将获得该字符串的内存位置。所以这就是">你在比较指针"的意思;C++不像其他语言那样,机器被抽象出来。您正在使用机器使用的真实 1 和 0。一切都存在于记忆中的某个地方。

strcmp是一个函数,它接受两个指针,然后比较这些指针引用的内存位置中的值。

if( ! strcmp(a,b) )
   ;//then the two strings are the same

您是在比较指针,而不是字符。

如果您使用的是现代编译器,则可以这样做:

if ("bac"s < "ab"s) cout << "1";
if ("ab"s > "bac"s) cout << "1";

s后缀告诉编译器字符串文本的类型为 std::string


如果您的编译器不支持此功能,则可以使用老式方式执行此操作:

if (string("bac") < string("ab")) cout << "1";
if (string("ab") > string("bac")) cout << "1";

还是古老的C式方式:

if (strcmp("bac, "ab") < 0) cout << "1";
if (strcmp("ab, "bac") > 0) cout << "1";