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 );
a
和b
是指针,内存中的地址。所以无论这两个字符串是什么,它们在内存中的位置都是不同的。这意味着无论两个字符串的内容是什么,a
永远不会 等于 到 b
.
当你"abc"
你得到那个字符串的内存位置。这就是“你正在比较指针。”的意思; C++ 不像其他语言那样 machine 被抽象掉了。您正在使用机器使用的真实 1 和 0。一切都存在于记忆中的某个地方。
strcmp
是一个函数,它接受两个指针,然后比较这些指针所指的内存位置中的值。
if( ! strcmp(a,b) )
;//then the two strings are the same
我在 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 );
a
和b
是指针,内存中的地址。所以无论这两个字符串是什么,它们在内存中的位置都是不同的。这意味着无论两个字符串的内容是什么,a
永远不会 等于 到 b
.
当你"abc"
你得到那个字符串的内存位置。这就是“你正在比较指针。”的意思; C++ 不像其他语言那样 machine 被抽象掉了。您正在使用机器使用的真实 1 和 0。一切都存在于记忆中的某个地方。
strcmp
是一个函数,它接受两个指针,然后比较这些指针所指的内存位置中的值。
if( ! strcmp(a,b) )
;//then the two strings are the same