将字符串附加到Matlab数组

问题描述:

如何将字符串附加到Matlab数组列?将字符串附加到Matlab数组

这里是什么,我试图做一个小的代码片段:

for_loop 
    filename = 'string'; 
    name=[name; filename] 
end 

您需要使用单元阵列。如果迭代次数是事先知道的,我建议你预先分配:

N = 10; 
names = cell(1,N); 
for i=1:N 
    names{i} = 'string'; 
end 

否则,你可以这样做:

names = {}; 
for i=1:10 
    names{end+1} = 'string'; 
end 
+14

哇,感谢{end + 1}语法,我甚至不知道在这种情况下是否存在“end”。 – 2010-07-23 19:30:40

+2

是{end + 1}比{length(..)+ 1}好得多! – 2012-04-13 11:04:24

你要以正确的方式。使用{}构建单元阵列,如下所示:

stringtable = 'a string'; 
for i = 1:3 
    stringtable = {stringtable;new_string(i)} 
end 

应该做你想做的。

+0

使用{...}像这样迭代地构造,最终会得到一个像树或Lisp列表的嵌套单元数组,而不是一个cellstr。 “strs = {'a string'};对于i = 1:3; strs = [strs; {new_string(i)}]; end”或“... strs {end + 1} = new_string(i) ; ...“? – 2010-02-18 20:06:07

正如别处所述,在MATLAB中,数组中的所有字符串必须具有相同的长度。要有不同长度的字符串,请使用单元阵列:

name = {}; 
for i = somearray 
    name = [name; {string}]; 
end 
+0

适合我。谢谢!! – Name 2010-02-18 14:14:58

至于其他的答案已经指出,使用cell arrays可能是最直接的方法,这将导致变量name是一个单元格数组,其中每个单元格元素包含一个字符串。

但是,还有一个选项使用功能STRVCAT,它将垂直连接字符串。这将创建一个2-D字符矩阵,每行包含一个字符串,而不是创建单元阵列。 STRVCAT自动垫串的端部用空格如果要正确填充矩阵的行:

>> string1 = 'hi'; 
>> string2 = 'there'; 
>> S = strvcat(string1,string2) 

S = 

hi 
there 

name=[]; 
for_loop 
    filename = 'string'; 
    name=[name; {filename}]; 
end 

如果使用两个阵列如下面(A和B)可以追加他们喜欢什么你使用其他矩阵。

A = {'a' ; 'b' ; 'c'}; 
B = {'1' ; '2' ; '3'}; 
Result = { A{:,1} ; B{:,1} } 

Result = 

'a' 'b' 'c' 
'1' '2' '3' 

我知道这是一个古老的线程,但它好像你甚至不需要一个循环,如果这是你的循环正在做的。你可以使用垂直连接吗?

mmm = {'str1'; 'str2'; 'str3'}; 
    temp = {'a'; 'b'; 'c'}; 

    mmm = [mmm; temp] 

mmm = 

    'str1' 
    'str2' 
    'str3' 
    'a' 
    'b' 
    'c' 

使用strcat功能追加使用一个线路码,而不使用环:

A={'food','banana','orange'} 

A = '食物' '香蕉' '桔子'

A = strcat(A,'s') 

A ='食品''香蕉''橙子'

+0

加1;谢谢!不知道'strcat'适用于大小不一的连接! – 2016-08-25 16:28:54

为了完整起见,还应该提及在MATLAB R2016b中引入的新的string class;一个用于文本数据的容器以及一组用于轻松进行文本操作的功能。

为了比较这对我other example,这里是如何分配string array

N = 10; 
names = strings(1,N); 
for i=1:N 
    names(i) = 'string'; 
end 

这里是如何动态地扩展,而不预分配数组:

names = strings(0); 
for i=1:10 
    names(end+1) = 'string'; 
end 

(当然如果这些字符串都是相同的,或者与一个模式形成一个序列,有没有更好的方式来创建没有循环的数组,上面只是一个一个地填充数组的例子)。

string容器也可以转换从character arrayscell arrays of chars到/。