字符串比较

时间:2013-12-30 01:31:23

标签: 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 == '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的长度,则它仅在else分支中输出我的错误消息,cosh或tanh等于4.否则,如果输入的字符串长度不等于4,则打印

Error using  == 
Matrix dimensions must agree.

Error in hyperbolic (line 10)
    if string == 'sinh' | string == 'cosh' | string == 'tanh' 

我的问题:

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

P.S。忽略结果的实际值,我只是在测试一些东西

2 个答案:

答案 0 :(得分:2)

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

if strcmp(string,'sinh')

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

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

答案 1 :(得分:2)

根据matlab documentation,您需要使用strcmp来比较字符串的相等性,因为它可以比较不同长度的字符串。

引用(强调是我的):

  

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

     

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

     

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

此外,您的代码可以缩短(您不需要比较字符串两次):

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

或根据评论,您可以使用switch声明:

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