C++ 字符 - 关系运算符
C++ Char - Relational Operators
我在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 );
a
和b
是指针,是内存中的地址。因此,无论两个字符串中有什么,它们都位于内存中的不同位置。这意味着无论两个字符串的内容如何,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";
相关文章:
- 在 c++ 中对字符串进行操作的关系运算符无法按预期工作
- 为什么在C++中使用关系运算符创建的模板函数不能对字符串正常工作?
- 当关系运算符的含义相同时,为什么结果不同?
- C++使用关系运算符比较字符串
- 阐明关系运算符重载的概念(需要调试帮助)
- 迭代器关系运算符出错(带单独链接和迭代器的自定义哈希表)
- 当我有两个对象时<<如何重载运算符?(有关系)
- 为什么赋值运算符和相等运算符之间没有 1:1 的关系?
- 重载运算符<关系C++
- C++使用 shared_ptr 但调用了对象的关系运算符?
- C++ 字符 - 关系运算符
- 使用关系运算符比较指针意味着什么
- C++ 如何重载关系运算符以检查两个对象是否相同
- 枚举类的关系运算符重载
- C++ STL 关系运算符如何比较堆栈
- 为什么指针类型的内置关系运算符不生成C++的总顺序?
- ostream 插入运算符与其非成员重载之间的关系
- 字符串类关系运算符重载
- 与关系运算符的字符串比较(长度不同)
- 为两个类定义重载的强制转换运算符,这两个类之间具有循环依赖关系