for i=1:N
f(i) = 'f'+i;
end
如何在MatLab中用N个fi字符串初始化数组? 如果使用类似下面的语法会报错,请问正确的语法是什么?
看起来即使使用以下语法也不起作用:
for i=1:4
f(i) = 'f';
end
['f', num2str(i)]
稍微短一些。 - Oli一种简单的非循环方法是使用 genvarname
函数创建一个字符串类型的 cell 数组:
>> 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 Siddiquigenvarname
已被弃用。 - Czechnology让我再添加一个解决方案:
>> 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'
在评论中,ldueck已提出使用sprintf
的建议,但我认为这值得成为一个答案:
f(i) = sprintf('f%d', i);
在我看来,这是最易读的解决方案,同时也提供了一些不错的灵活性(例如当您想要对浮点值四舍五入时,可以使用类似于%.2f
的内容)。
for i = 1:4
result = strcat('f',int2str(i));
end
如果您用它来命名代码生成的多个文件,您可以将更多的部分连接到名称中。例如,在末尾添加扩展名,在开头添加地址:
filename = strcat('c:\...\name',int2str(i),'.png');
f
长成什么样子?是一个包含所有单独的fi
字符串连接在一起的字符串吗?还是每行一个字符串的字符数组?或者是一个单元数组? - gnovice"asd" + (1:5)
就可以工作了。 - bonanza