为什么strcmp不能识别两个看似相同的字符串呢?

时间:2015-04-02 14:23:23

标签: matlab strcmp

以下是Matlab控制台的输出。两个字符串都相同:'@TBMA3'。然而,Matlab的strcmp函数在比较它们时会返回0。为什么?

K>> str='@TBMA3'
str =
@TBMA3

K>> method.fhandle
ans = 
@TBMA3

K>> strcmp(method.fhandle, str)
ans =
     0

1 个答案:

答案 0 :(得分:8)

最可能的原因是method.fhandle不是字符串,而是函数句柄。检查class(method.fhandle)是否给出了

ans =
function_handle

在这种情况下,比较会给出0,因为字符串(str)不能等于函数句柄(method.fhandle)。

为了检查是否相等,您需要将method.fhandle转换为字符串,或将str转换为函数句柄。第一个选项不合适,因为char(function_handle)会提供'TBMS3',而不会'@'。因此,请使用第二个选项,并使用isequal进行比较:

isequal(method.fhandle, str2func(str))

应该给1

isequal比较有效,因为method.fhandlestr2func(str)都指向同一个已定义的函数TBMA3。与提供f = @(x)x; g = @(x)x, isequal(f,g)的{​​{1}}进行比较。此行为是explained in the documentation。感谢@knedlsepp帮助澄清这一点。功能