【发布时间】:2011-01-18 08:03:13
【问题描述】:
如何将字符串追加到 Matlab 数组列?
这是我正在尝试做的一个小代码sn-p:
for_loop
filename = 'string';
name=[name; filename]
end
【问题讨论】:
标签: arrays string matlab append
如何将字符串追加到 Matlab 数组列?
这是我正在尝试做的一个小代码sn-p:
for_loop
filename = 'string';
name=[name; filename]
end
【问题讨论】:
标签: arrays string matlab append
你走对了。使用 {} 构建元胞数组,如下所示
stringtable = 'a string';
for i = 1:3
stringtable = {stringtable;new_string(i)}
end
应该做你想做的。
【讨论】:
如其他地方所述,在 MATLAB 中,数组中的所有字符串必须具有相同的长度。要拥有不同长度的字符串,请使用元胞数组:
name = {};
for i = somearray
name = [name; {string}];
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
【讨论】:
names 作为fopen 的输入,但是fopen 抱怨它的类型错误:cell。如何将单元格类型转换为字符串?
正如其他答案所指出的,使用 cell arrays 可能是最直接的方法,这将导致您的变量 name 成为一个单元格数组,其中每个单元格元素都包含一个字符串。
但是,还有另一个选项使用函数STRVCAT,它将垂直连接字符串。这将创建一个二维字符矩阵,而不是创建一个元胞数组,每行包含一个字符串。 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 = '食物' '香蕉' '橙子'
【讨论】:
strcat 适用于大小不一的连接!
为了完整起见,还应提及 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 相互转换。
【讨论】: