c++中的字符串比较
String compare in c++
c++中(x == "x")
和("x" == x)
比较的区别是什么?假设x
是std::string
。有什么理由可以说明为什么其中一个会比另一个更受欢迎吗?
一个是字符串文字"X"
,另一个是std::string
的实例。有些人主张将常量"x"
放在左侧,因为如果使用赋值=
而不是相等==
:
if ("x" = x) // Error! Trying to assign to const char[]
if (x = "x") // Setting the value of x to be "x", and evaluating "x".
// Probably not what you want.
我认为这两个调用都会导致对bool std::string operator==(const std::string&, const std::string&)
的调用。
这是因为没有从std::string
到const char*
的隐式转换操作符,但有从const char*
到std::string
的隐式构造函数。
这里是尤达条件句的封闭问题:
这是我最讨厌的事情之一尤其是当我看到别人的时候代码。我知道这意味着什么,也知道为什么有些人这样做("如果我不小心把'='写成了?")。为就像我小时候一样走下楼梯数着大声走出来。
无论如何,这是我反对的理由:
- 它破坏了读取程序代码的自然流程。我们人类,说"if值为零"而不是"if"
- 现代编译器在你的条件中有赋值时警告你,或者如果你的条件包括只是那个任务,是的,看起来很可疑
- 当你比较值时,你不应该忘记使用双'='你是一个程序员。你也可以在测试时忘记使用"!"non-equality。
-mojuba
接受回答:
啊,是的,"尤达条件" ("If 0值是,执行此代码必须!")。我总是指着谁声称他们"更擅长"使用诸如皮棉(1)。这个特殊的问题70年代末就破了。大多数现代语言甚至不能编译这是因为他们拒绝强迫布尔值赋值的结果。
就像其他人说的,它肯定是不是问题,但确实会引起有点认知失调
tmn
我更喜欢使用for nsstring…
([x isEqualToString:@"x"])
或c字符串
strcmp(str1,str2);
这两种情况之间没有区别,除了内部的一些东西。这就像你手里拿着两件东西,一只手拿一个,然后比较它们,然后根据它们在. ...中是哪只手这不是一个因素。
- 视觉C++使用 map 来比较字符串中的每个单词
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 比较字符串的 GetLine 工作一次,然后比较之后不起作用
- C++使用关系运算符比较字符串
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- C++ TCP 服务器比较字符串失败
- 如何在不复制的情况下比较字符串的一部分?
- 比较 C++ 字符串打印中的两个整数数组
- 如何比较字符串形式的临时变量
- std::out_of_range 比较字符串中的符号时出错
- 比较字符串大小写不区分的简单方法是什么?
- 比较字符串忽略 NUL
- 比较字符串(arduino)时出现问题
- 如何在C++中比较字符串
- 比较字符串对象等于向量中的元素
- C 比较字符串操作速度
- 需要比较字符串的某些元素
- 比较字符串 .c_str() 和普通字符串的差异
- C 比较字符串的字符
- 通过使用两个不同的队列比较字符串