我们为什么不使用==在Matlab中比较字符串

max*_*ywb 8 matlab string-comparison

我知道通常认为使用strcmp是比较字符串的正确方法,但我的问题是为什么?根据帮助:

A == B在A和B之间进行逐元素比较,并返回相同大小的矩阵,其中元素设置为逻辑1,其中关系为true,元素设置为逻辑0,而不是.

我能提出的所有玩具示例似乎都有效.

aqu*_*ini 7

==使用逐字符比较,因此尝试==使用两个不同长度的字符串来测试相等性应该给你一个错误.


hor*_*ler 7

strcmp还会检查输入是否为char类,例如strcmp('a',double('a'))返回false,但'a' == double('a')返回true.strcmp干净地处理空输入,你不必担心两个字符串长度相同.您可以使用单元格输入轻松比较多个有用的字符串.

字符串比较可能会更慢 - 至少在当前的Matlab中.但是,不要以牺牲可读性和可维护性为代价过早地优化代码.仅在极少数情况下使用==(或可能isequal),当您确实需要性能并且非常确定您要比较的内容时(例如,使用ischarisempty首先).

  • @Coconut Jones指出的主要区别是`==`是元素比较,因此如果字符串长度不同则会出错,否则它会返回一个逻辑数组,你需要用`all`来减少它.另一方面,`isequal`与字符串的`strcmp`几乎相同. (6认同)

Nav*_*van 6

另一个小例外是空字符串.

'' == ''在if语句中使用求值为false.

strcmp('','') 是真的.