如何连接字符串+ i?


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

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

似乎这还行不通:

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

您到底想让数组f看起来像什么?将所有单个fi字符串串联在一起的单个字符串?每行一个字符串的字符数组?一个细胞阵列?
gnovice

对于最新版本的MATLB,请使用字符串。例如,"asd" + (1:5)然后工作。
bonanza

Answers:


117

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

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

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

10
像“ f(i)= sprintf('%s%d',f,i);之类的东西” 也会工作。
telenachos 2011年

我的问题是缺少使用大括号索引
simpatico

10
['f', num2str(i)]有点短。
奥利

24

对于R2014a之前的版本...

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

>> 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'

这实际上是一个很好的解决方案。我不知道genvarname
Mansoor Siddiqui

仅供参考:genvarname已弃用。
捷克学

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'

4

使用sprintf已经在评论提出ldueck,但我认为这是值得的答案:

f(i) = sprintf('f%d', i);

我认为这是最易读的解决方案,并且还提供了一些不错的灵活性(即,当您想舍入一个float值时,请使用%.2f)。


2

根据这个,它看起来像你必须设置“N”试图使用它之前,它看起来像它需要一个int不串?对MatLab知之甚少,但是我从那个网站收集的信息..希望它会有所帮助:)


2

请尝试以下操作:

for i = 1:4
    result = strcat('f',int2str(i));
end

如果使用它来命名代码生成的多个文件,则可以将更多部分串联到名称上。例如,以扩展名结尾和以地址开头:

filename = strcat('c:\...\name',int2str(i),'.png'); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.