相当于为循环添加字符串,对于字符串(matlab)?

时间:2012-10-18 23:42:17

标签: string matlab loops for-loop matrix

我怎么能用字符串做相同的事情:

a = [1 2 3; 4 5 6];
c = [];
for i=1:5
b = a(1,:)+i;
c = [c;b];   
end

c =

 2     3     4
 3     4     5
 4     5     6
 5     6     7
 6     7     8

基本上希望将几个字符串组合成一个矩阵。

2 个答案:

答案 0 :(得分:3)

你在循环中增加一个变量,这在Matlab中是一种罪恶:)所以我将向你展示一些更好的数组连接方法。

有细胞串:

>> C = {
    'In a cell string, it'
    'doesn''t matter'
    'if the strings'
    'are not of equal lenght'};

>> C{2}
ans = 
    doesn't matter

你可以在循环中使用它:

% NOTE: always pre-allocate everything before a loop
C = cell(5,1);

for ii = 1:5
    % assign some random characters
    C{ii} = char( '0'+round(rand(1+round(rand*10),1)*('z'-'0')) );
end

有普通的数组,有一个缺点,你必须事先知道所有字符串的大小:

a = [...
    'testy'     % works
    'droop'
];

b = [...
    'testing'              % ERROR: CAT arguments dimensions 
    'if this works too'    % are not consistent. 
    ];

对于这些情况,请使用char

>> b = char(...
      'testing',...
      'if this works too'...
      );
b =
   'testing          '
   'if this works too'

注意char如何用空格填充第一个字符串以适合第二个字符串的长度。现在再说一遍:不要在循环中使用它,除非你已经预先分配了数组,或者确实没有其他方法可去。

在Matlab命令提示符下键入help strfun,以获得Matlab中可用的所有字符串相关函数的概述。

答案 1 :(得分:1)

你的意思是在每个矩阵位置存储一个字符串?你不能那样做,因为矩阵是在基本类型上定义的。你可以在每个位置都有一个CHAR:

>> a = 'bla';
>> b = [a; a]  

b <2x3 char> =

bla
bla

>> b(2,3) = 'e'

b =

bla
ble

如果要存储矩阵,请使用单元格数组MATLAB referenceBlog of Loren Shure),它们类似类似但使用“{}”代替“( )“:

>> c = {a; a}

c = 

    'bla'
    'bla'

>> c{2}

ans =

bla