matlab中字符串和整数的比较

时间:2015-02-05 15:13:45

标签: string matlab

我正在进行一些分类,因此需要将整数代码转换为字符串。我写了这样的话:

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的值为'c1',而第二次转化中find的参数不是我认为的那样。 [s.class]语句实际上返回类似字符串'c1\a\t'的字符串,用于响铃和水平制表符的ASCII转义序列。

由于比较确实有效(返回矩阵[1 1 1 1]并因此扩展我的结构),我假设matlab转换操作数[s.class]或操作数1。 这是什么?这里的数字或字符实际上是什么?

另一方面,有一种内置的方式可以使>更具限制性,i。即要求操作数是相同的类型,如果不是要抛出错误?

2 个答案:

答案 0 :(得分:2)

进行比较'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

答案 1 :(得分:0)

因为你还没有提供任何预期的输出,我将继续观察。

您正在使用理解方法(通过调用find)来确定将使用方法s的结果为struct deal填充哪些位置(采用参数{{ 1}}和c1)。您已经在您提供的第一个代码段中为s {whatever).class设置了类型。这意味着它是你要比较的数字,而不是字符。

c2函数可以查看变量属于哪个类。用它来看你实际投入的是什么(对于你的情况应该说是int32)。