如何连接字符串+ i?

sim*_*ico 76 string matlab loops for-loop octave

for i=1:N
   f(i) = 'f'+i;
end
Run Code Online (Sandbox Code Playgroud)

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

似乎即使这不起作用:

for i=1:4
  f(i) = 'f';
end
Run Code Online (Sandbox Code Playgroud)

Man*_*qui 116

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

此外,字符串不能存储在向量或矩阵中,因此f必须定义为单元格数组,并且必须使用{}(而不是普通的圆括号)进行索引.

f = cell(N, 1);
for i=1:N
   f{i} = strcat('f', num2str(i));
end
Run Code Online (Sandbox Code Playgroud)

  • 像"f(i)= sprintf('%s%d',f,i);" 会工作的. (10认同)
  • `['f',num2str(i)]`有点短. (9认同)

gno*_*ice 24

对于R2014a之前的版本......

一种简单的非循环方法是genvarname用于创建字符串的单元格数组:

>> N = 5;
>> f = genvarname(repmat({'f'}, 1, N), 'f')

f = 

    'f1'    'f2'    'f3'    'f4'    'f5'
Run Code Online (Sandbox Code Playgroud)

对于较新的版本......

该函数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'
Run Code Online (Sandbox Code Playgroud)


Amr*_*mro 9

让我添加另一个解决方案:

>> N = 5;
>> f = cellstr(num2str((1:N)', 'f%d'))
f = 
    'f1'
    'f2'
    'f3'
    'f4'
    'f5'
Run Code Online (Sandbox Code Playgroud)

如果N长度超过两位数(>= 10),您将开始获得额外的空格.添加一个电话来strtrim(f)摆脱它们.


作为奖励,有一个未记录的内置函数sprintfc,可以很好地返回字符串的单元格数组:

>> N = 10;
>> f = sprintfc('f%d', 1:N)
f = 
    'f1'    'f2'    'f3'    'f4'    'f5'    'f6'    'f7'    'f8'    'f9'    'f10'
Run Code Online (Sandbox Code Playgroud)


lua*_*tor 5

ldueck 在评论中已经提议使用sprintf,但我认为这值得作为一个答案:

f(i) = sprintf('f%d', i);
Run Code Online (Sandbox Code Playgroud)

在我看来,这是最具可读性的解决方案,并且还提供了一些很好的灵活性(即,当您想要舍入浮点值时,请使用类似的东西%.2f)。