MATLAB - 在向量中查找字符串的索引

时间:2014-02-02 04:34:44

标签: matlab printf

我正在尝试打印一个非常简单的表格(使用fprintf),显示我已经获得的一组数据的统计数据。

我是Matlab的新手,但是 - 我已经习惯了Java - 我认为这应该有用......

Labels = ['Max','Min','Mean','Median','Std. Dev.','Tol. Range'];
for i = 1:6
    fprintf('| %c | %4.3f | %4.3f |\n', Labels(i), unmodVals(i), modVals(i));
end

但它不起作用。 :(

由于某种原因,字符串的数组索引与Java中的工作方式不同,所以我完全迷失了。

它最终打印出类似的东西:

| M |    ####    |    ####    |
| a |    ####    |    ####    |
| x |    ####    |    ####    |
| M |    ####    |    ####    |
| i |    ####    |    ####    |
| n |    ####    |    ####    |

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

字符数组在MATLAB中的工作方式略有不同。 Labels不是像你期望的那样的1x6字符串数组;你拥有的那条线相当于

Labels = strcat('Max','Min','Mean','Median','Std. Dev.','Tol. Range');

所以它是一个1x35的字符数组,并且你一次索引一个字符。将Labels更改为字符串的单元格数组,如下所示。您必须使用大括号{ }而不是括号( )对其进行索引,并将相应的fprintf格式说明符更改为%s%c用于打印字符)< / p>

Labels = {'Max','Min','Mean','Median','Std. Dev.','Tol. Range'};

for i = 1:6
    fprintf('| %s | %4.3f | %4.3f |\n', Labels{i}, unmodVals(i), modVals(i));
end

答案 1 :(得分:0)

您将字符串存储在名为Labels的数组中。在MATLAB中,当您编写['a', 'bc']时,它会连接两个字符串并生成abc。因此,您应该使用单元格数组来存储不同大小的字符串。

Labels = {'Max','Min','Mean','Median','Std. Dev.','Tol. Range'}; %notice the curly braces.

%generating random values of `unmodVals` and `modVals`
unmodVals=randi(1000,[1 6]);
modVals=randi(1000,[1 6]);
for i = 1:6
    fprintf('| %s | %4.3f | %4.3f |\n', Labels{i}, unmodVals(i), modVals(i)); %notice change    from `%c` to `%s`, c stands for charater, s for string.
end

注意:如果您看到Label变量的外观,您会看到:

Labels = MaxMinMeanMedianStd. Dev.Tol. Range