【发布时间】:2013-12-30 22:45:46
【问题描述】:
在 MATLAB 中,我经常使用它来检查变量是否包含某个单个字符:
if ischar(x) && x == 'b'
为了减少混乱,我正在考虑将其更改为:
if strcmp(x, 'b')
因为如果x 不是字符或不等于'b',则比较返回false,如您所料。在这种情况下,这些语句是等效的还是存在陷阱?
更多信息:x == 'b' 还不够,因为这在 x == 98 时返回 true,但在某些情况下(例如验证用户输入),98 可能是无效输入,而 b em> 有效输入。此外,如果 x 不是标准数据类型(例如,如果它是对象),第一个失败。举这个(愚蠢的)例子:
x = table();
x == 'b'
这会引发错误,因为eq 没有为表定义,但strcmp(x, 'b') 返回0,因为strcmp 似乎也执行类型检查。这种异常处理是否可取可能取决于具体情况。
【问题讨论】:
-
我对matlab不太了解,但是比较
x和'b'还不够吗?是否可以等于'b'而不是char? -
@CoreyOgburn 是的。
98 == 'b'在 MATLAB 中返回 true,但出于我的目的,这还不够好,因为在一种情况下(例如),我正在验证用户输入,而98将是无效输入。 -
strcmp是要走的路,正如@chappjc 所回答的那样。请注意,如果x包含多个字符,ischar(x) && x=='b'将给出错误。如果您想这样做,请使用ischar(x) && length(x)==1 && x=='b'
标签: matlab