String 字符串比较

String 字符串比较,string,matlab,function,String,Matlab,Function,我写了一个简单的程序来学习Matlab中的子函数。在这个过程中,我遇到了一个我希望得到帮助的错误。下面是函数 function result = hyperbolic(string,x) %HYPERBOLIC calculates the sinh, cosh and tanh of a given value msg = nargchk(2,2,nargin); error(msg); if string == 'sinh' | string == 'cosh' | string

我写了一个简单的程序来学习Matlab中的子函数。在这个过程中,我遇到了一个我希望得到帮助的错误。下面是函数

function result = hyperbolic(string,x)
%HYPERBOLIC calculates the sinh, cosh and tanh of a given value

msg = nargchk(2,2,nargin);
error(msg);

    if string == 'sinh' | string == 'cosh' | string == 'tanh'
        if string == 'sinh'
            result = sinh(x);
        elseif string == 'tanh'
            result = tanh(x);
        elseif string == 'cosh'
            result = cosh(x);
        end
    else
        error('Invalid String');
    end
end

function sinh_output = sinh(x)
sinh_output = 1;
end

function cosh_output = cosh(x)
cosh_output = 2;
end

function tanh_output = tanh(x)
tanh_output = 3;
end
问题是:

当函数检查输入的字符串是否等于sinh、tanh或cosh时,如果输入字符串的长度等于sinh、cosh或tanh的长度(等于4),它只在else分支中打印我的错误消息。否则,如果输入的字符串长度不等于4,则打印该字符串

Error using  == 
Matrix dimensions must agree.

Error in hyperbolic (line 10)
    if string == 'sinh' | string == 'cosh' | string == 'tanh' 
我的问题:

当两个字符串的长度不相等时,为什么不打印我的错误消息

另外,忽略结果的实际值,我只是测试了一些东西来比较字符串,使用。例如:

if strcmp(string,'sinh')
==
与字符串一起使用的问题是,Matlab将其解释为字符向量之间的相等测试(字符串是字符向量);只有当向量的长度相等时,才定义相等关系。如果它们的长度不同,则会发出错误;除非其中一个是一个单一的角色,就像丹尼斯在评论中指出的那样。在后一种情况下,Matlab会将单个字符与另一个字符串的每个字符进行比较

strcmp
接受长度相等或不同的字符串(当然,如果长度不同,则返回
false
,因为在这种情况下,字符串不同)。因此,这是测试字符串是否相等的方法。

要比较字符串,请使用。例如:

if strcmp(string,'sinh')
==
与字符串一起使用的问题是,Matlab将其解释为字符向量之间的相等测试(字符串是字符向量);只有当向量的长度相等时,才定义相等关系。如果它们的长度不同,则会发出错误;除非其中一个是一个单一的角色,就像丹尼斯在评论中指出的那样。在后一种情况下,Matlab会将单个字符与另一个字符串的每个字符进行比较

strcmp
接受长度相等或不同的字符串(当然,如果长度不同,则返回
false
,因为在这种情况下,字符串不同)。因此,这是测试字符串是否相等的方法。

根据需要,您需要使用
strcmp
来比较字符串是否相等,因为它允许比较不同长度的字符串

引用(强调是我的):

关系运算符是、=、==、和~=。关系运算符在两个数组之间执行元素对元素的比较。它们返回一个大小相同的逻辑数组,其中关系为true的元素设置为逻辑1(true),关系为true的元素设置为逻辑0(false)

运算符,=仅使用其操作数的实部进行比较。运算符==和~=测试实部和虚部

要测试两个字符串是否相等,请使用strcmp,它允许比较不同长度的向量。

您的代码也可以缩短(您不需要对字符串进行两次比较):

或者根据注释,您可以使用
开关
语句:

switch string
    case 'sinh'
        result = sinh(x);
    case 'tanh'
         result = tanh(x);
    case 'cosh'
         result = cosh(x);
    otherwise
         error('Invalid String');
end
根据需要,您需要使用
strcmp
来比较字符串是否相等,因为它允许比较不同长度的字符串

引用(强调是我的):

关系运算符是、=、==、和~=。关系运算符在两个数组之间执行元素对元素的比较。它们返回一个大小相同的逻辑数组,其中关系为true的元素设置为逻辑1(true),关系为true的元素设置为逻辑0(false)

运算符,=仅使用其操作数的实部进行比较。运算符==和~=测试实部和虚部

要测试两个字符串是否相等,请使用strcmp,它允许比较不同长度的向量。

您的代码也可以缩短(您不需要对字符串进行两次比较):

或者根据注释,您可以使用
开关
语句:

switch string
    case 'sinh'
        result = sinh(x);
    case 'tanh'
         result = tanh(x);
    case 'cosh'
         result = cosh(x);
    otherwise
         error('Invalid String');
end

请注意,在Matlab文档中提到使用strcmp比较字符串。请注意,等式测试也可用于查找数组中的字符。例如:
'abcd'='c'
将返回逻辑向量
[0 0 1 0]
请注意,在Matlab文档中提到使用strcmp比较字符串。请注意,等式测试也可用于查找数组中的字符。例如:
'abcd'='c'
将返回逻辑向量
[0 0 1 0]
实际上一个
开关
语句会更好。实际上一个
开关
语句会更好。