C++ Char - 关系运算符

C++ Char - Relational Operators

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

输入:

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

输出:

11

我真的不明白为什么它打印“11”,而且如果我擦掉第一个 'if' 它就不会再在屏幕上打印任何东西。你能解释一下为什么它在这些 IF 上有这样的行为吗?

你比较的是指针,而不是字符。

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

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";
`if("abc" < "bcd" );

这相当于:

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

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

当你"abc"你得到那个字符串的内存位置。这就是“你正在比较指针。”的意思; C++ 不像其他语言那样 machine 被抽象掉了。您正在使用机器使用的真实 1 和 0。一切都存在于记忆中的某个地方。

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

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