gpt4 book ai didi

matlab - 比较字符时,ischar(x) && x == 'b' 是否等同于strcmp(x, 'b' )?

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:44 25 4
gpt4 key购买 nike

在 MATLAB 中,我经常使用它来检查变量是否包含某个单个字符:

if ischar(x) && x == 'b'

为了减少困惑,我正在考虑将其更改为:

if strcmp(x, 'b')

因为如果 x 不是一个字符或不等同于 'b',则比较会如您所料返回 false。在这种情况下,这些陈述是否等同或是否存在问题?

更多信息:x == 'b' 还不够,因为当 x == 98 时返回 true,但在某些情况下(例如验证用户输入) , 98 可能是无效输入,而 b 有效输入。此外,如果 x 不是标准数据类型(例如,如果它是一个对象),第一个失败。以这个(愚蠢的)例子为例:

x = table();
x == 'b'

这会抛出一个错误,因为 eq 没有为表定义,但是 strcmp(x, 'b') 返回 0 因为 strcmp 还执行类型检查。不过,这种异常处理是否可取可能取决于具体情况。

最佳答案

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

也考虑使用 strcmpi忽略大小写或 strncmp比较前 N 个元素。

关于matlab - 比较字符时,ischar(x) && x == 'b' 是否等同于strcmp(x, 'b' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com