如何连接string+我?
for i=1:N f(i) = 'f'+i; end
在MatLab中给出了一个错误。 使用模式fi的N个string初始化数组的正确语法是什么?
看起来即使这不起作用:
for i=1:4 f(i) = 'f'; end
你可以使用strcat
连接string。 如果您计划将数字连接为string,则必须先使用num2str
将数字转换为string。
此外,string不能存储在向量或matrix,所以f
必须定义为一个单元格数组 ,并且必须使用{
和}
(而不是正常的圆括号)进行索引。
f = cell(N, 1); for i=1:N f{i} = strcat('f', num2str(i)); end
对于R2014a之前的版本…
一个简单的非循环方法是使用genvarname
来创build一个string的单元数组 :
>> 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'
让我再添加一个解决scheme:
>> N = 5; >> f = cellstr(num2str((1:N)', 'f%d')) f = 'f1' 'f2' 'f3' 'f4' 'f5'
如果N
长于两位数( >= 10
),您将开始获得额外的空间。 添加一个调用strtrim(f)
摆脱他们。
作为奖励,还有一个未sprintfc
内置函数sprintfc
,它很好的返回了string的单元格数组:
>> N = 10; >> f = sprintfc('f%d', 1:N) f = 'f1' 'f2' 'f3' 'f4' 'f5' 'f6' 'f7' 'f8' 'f9' 'f10'
根据这个 ,看起来你必须设置“N”之前试图使用它看起来像它需要是一个int而不是string? 不知道很多回合MatLab,但只是从该网站收集..hop它帮助:)
尝试以下操作:
for i = 1:4 result = strcat('f',int2str(i)); end
如果您使用它来命名代码生成的多个文件,则可以将更多部分连接到名称。 例如,扩展名在末尾,地址在开头:
filename = strcat('c:\...\name',int2str(i),'.png');
ldueck在评论中已经提出使用sprintf
,但是我认为这是一个值得回答的问题:
f(i) = sprintf('f%d', i);
这是在我看来最可读的解决scheme,也给了一些很好的灵活性(即当你想要一个浮点值,使用像%.2f
东西)。