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)
gno*_*ice 24
一种简单的非循环方法是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)
让我添加另一个解决方案:
>> 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)
ldueck 在评论中已经提议使用sprintf,但我认为这值得作为一个答案:
f(i) = sprintf('f%d', i);
Run Code Online (Sandbox Code Playgroud)
在我看来,这是最具可读性的解决方案,并且还提供了一些很好的灵活性(即,当您想要舍入浮点值时,请使用类似的东西%.2f)。
| 归档时间: |
|
| 查看次数: |
174953 次 |
| 最近记录: |