String 字符串比较
我写了一个简单的程序来学习Matlab中的子函数。在这个过程中,我遇到了一个我希望得到帮助的错误。下面是函数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
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]
实际上一个开关
语句会更好。实际上一个开关
语句会更好。