如何连接字符串+ i?

时间:2011-12-07 17:57:23

标签: string matlab loops for-loop octave

for i=1:N
   f(i) = 'f'+i;
end

在MatLab中出错。使用模式fi的N个字符串初始化数组的正确语法是什么?

似乎即使这不起作用:

for i=1:4
  f(i) = 'f';
end

6 个答案:

答案 0 :(得分:115)

您可以使用strcat连接字符串。如果您计划将数字连接为字符串,则必须先使用num2str将数字转换为字符串。

此外,字符串无法存储在向量或矩阵中,因此必须将f定义为cell array,并且必须使用{}对其进行索引(而不是普通的圆括号)。

f = cell(N, 1);
for i=1:N
   f{i} = strcat('f', num2str(i));
end

答案 1 :(得分:24)

对于R2014a之前的版本...

一种简单的非循环方法是使用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');