如何连接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东西)。