我正在做一些分类,因此需要将整数代码转换为字符串。我写了这样的东西:
s(1).class = 1;
s(2).class = 7;
s(3).class = 9;
[s([find([s.class] == 1)]).class] = deal('c1'); %first conversion
[s([find([s.class] > 1)]).class] = deal('c2'); %second conversion
感到惊讶的是,在第二次转换后发现s是1x4结构数组,而不是预期的带有值的1x3结构数组。现在,经过一些研究,我了解到在第一次转换后,s(1).class
is的值'c1'
和find
第二次转换中的to的参数并不是我所认为的那样。该[s.class]
语句实际上返回类似于'c1\a\t'
bell和水平制表符的带有ASCII转义序列的字符串。
随着比较的进行(返回矩阵[1 1 1 1]
并扩展我的结构),我假设matlab转换了操作数[s.class]
或操作数1
。哪有 这里实际上比较的是数字还是字符?
另一方面,是否有一种内置的方法可以使>
限制更加严格,即要求操作数具有相同的类型,并且是否不引发错误?
比较时'ab' > 1
,该char
数组'ab'
将转换为double
数组,即字符的ASCII码。所以'ab' > 1
等价于double('ab') > 1
,即给出[1 1]
。
要获得所需的行为(如果其中一个参数为,则发出错误char
),您可以定义一个函数:
function z = greaterthan(x,y)
if ischar(x) || ischar(y)
error('Invalid comparison: one of the input arguments is of type char')
else
z = x>y;
end
以便
>> greaterthan([0 1 2], 1)
ans =
0 0 1
>> greaterthan('ab', 1)
??? Error using ==> greaterthan at 3
Invalid comparison between char and int
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句