for i=1:N
f(i) = 'f'+i;
end
在MatLab中出错。使用模式fi的N个字符串初始化数组的正确语法是什么?
似乎即使这不起作用:
for i=1:4
f(i) = 'f';
end
答案 0 :(得分:115)
您可以使用strcat
连接字符串。如果您计划将数字连接为字符串,则必须先使用num2str
将数字转换为字符串。
此外,字符串无法存储在向量或矩阵中,因此必须将f
定义为cell array,并且必须使用{
和}
对其进行索引(而不是普通的圆括号)。
f = cell(N, 1);
for i=1:N
f{i} = strcat('f', num2str(i));
end
答案 1 :(得分:24)
一种简单的非循环方法是使用genvarname
创建cell array字符串:
>> N = 5;
>> f = genvarname(repmat({'f'}, 1, N), 'f')
f =
'f1' 'f2' 'f3' 'f4' 'f5'
函数genvarname
已弃用,因此可以通过以下方式使用matlab.lang.makeUniqueStrings
来获得相同的输出:
>> N = 5;
>> f = strrep(matlab.lang.makeUniqueStrings(repmat({'f'}, 1, N), 'f'), '_', '')
f =
1×5 cell array
'f1' 'f2' 'f3' 'f4' 'f5'
答案 2 :(得分:9)
让我添加另一个解决方案:
>> N = 5;
>> f = cellstr(num2str((1:N)', 'f%d'))
f =
'f1'
'f2'
'f3'
'f4'
'f5'
如果N
长度超过两位数(>= 10
),您将开始获得额外的空格。添加对strtrim(f)
的调用以摆脱它们。
作为奖励,有一个未记录的内置函数sprintfc
可以很好地返回字符串的单元格数组:
>> N = 10;
>> f = sprintfc('f%d', 1:N)
f =
'f1' 'f2' 'f3' 'f4' 'f5' 'f6' 'f7' 'f8' 'f9' 'f10'
答案 3 :(得分:4)
ldueck在评论中已经提出使用tableView
,但我认为这值得回答:
sprintf
在我看来,这是最易读的解决方案,并且还提供了一些很好的灵活性(例如,当您想要舍入浮点值时,请使用类似f(i) = sprintf('f%d', i);
的内容)。
答案 4 :(得分:2)
根据this看起来你必须在尝试使用它之前设置“N”,看起来它需要是一个int而不是字符串?不太了解MatLab,但只是我从该网站收集的内容......希望它有所帮助:)
答案 5 :(得分:2)
尝试以下方法:
for i = 1:4
result = strcat('f',int2str(i));
end
如果您使用它来命名代码生成的多个文件,则可以将更多部分连接到名称。例如,最后的扩展名和开头的地址:
filename = strcat('c:\...\name',int2str(i),'.png');