在MATLAB中,我经常使用它来检查变量是否包含某个单个字符:
if ischar(x) && x == 'b'
减少混乱我正在考虑改变它:
if strcmp(x, 'b')
因为如果x
不是字符或不等同于'b'
,则比较会返回false,如您所料。这些陈述在这种情况下是相同的还是有问题?
更多信息:x == 'b'
是不够的,因为这在x == 98
时返回true,但在某些情况下(如验证用户输入),98
可能无效输入{{1 } 是有效输入。此外,如果b
不是标准数据类型(例如,如果它是对象),则第一个失败。拿这个(愚蠢的)例子:
x
这会引发错误,因为没有为表定义x = table();
x == 'b'
,但eq
返回0,因为strcmp(x, 'b')
似乎也执行了类型检查。是否需要这种异常处理可能取决于具体情况。
答案 0 :(得分:4)
strcmp
是要走的路。 ==
运算符是元素方面的。如果x
不是单个字符,那么测试将返回logical
数组而不是一个:
>> x = 'abc';
>> x == 'b'
ans =
0 1 0
>> x = 'bbb';
>> x == 'b'
ans =
1 1 1
两者都不相等,第二个满足if语句。
另请注意,虽然==
(eq
)是元素方面的,但isequal
测试对象相等性。需要注意的是,isequal
不会在测试中考虑数据类型。那就是:
>> isequal('abc',[97 98 99])
ans =
1
>> strcmp('abc',[97 98 99])
ans =
0
>> eq('abc',[97 98 99])
ans =
1 1 1
如果您关心数据类型,请使用strcmp
,否则请使用isequal
。
答案 1 :(得分:2)
如果数组维度不相等,则它们不一定等效。
打印'true':
if 'bbbb' == 'b'
fprintf('true\n');
end
这不是:
if strcmp('bbbb', 'b')
fprintf('true\n');
end
答案 2 :(得分:0)
考虑使用strcmp而不是==运算符的另一个原因:
如果使用==运算符, 当字符串大小不同时,你会收到一个错误, 两者都至少有两个字符。
示例:
>> 'aa'=='bbb'
Error using ==
Matrix dimensions must agree.
>> strcmp('aa','bbb')
ans =
0