将字符串附加到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
你要以正确的方式。使用{}构建单元阵列,如下所示:
stringtable = 'a string';
for i = 1:3
stringtable = {stringtable;new_string(i)}
end
应该做你想做的。
使用{...}像这样迭代地构造,最终会得到一个像树或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
适合我。谢谢!! – 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 ='食品''香蕉''橙子'
加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 arrays和cell arrays of chars到/。
哇,感谢{end + 1}语法,我甚至不知道在这种情况下是否存在“end”。 – 2010-07-23 19:30:40
是{end + 1}比{length(..)+ 1}好得多! – 2012-04-13 11:04:24