如何连接字符串+ i?
Posted
技术标签:
【中文标题】如何连接字符串+ i?【英文标题】:How to concat string + i? 【发布时间】:2012-01-15 05:59:18 【问题描述】:for i=1:N
f(i) = 'f'+i;
end
在 MatLab 中给出错误。用模式 fi 的 N 个字符串初始化数组的正确语法是什么?
似乎连这都行不通:
for i=1:4
f(i) = 'f';
end
【问题讨论】:
您希望数组f
看起来像什么?将所有单独的 fi
字符串连接在一起的单个字符串?每行一个字符串的字符数组?元胞数组?
对于最新版本的 MATLB,请使用字符串。例如 "asd" + (1:5)
就可以了。
【参考方案1】:
对于 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'
【讨论】:
这实际上是一个很好的解决方案。我不知道genvarname
。
仅供参考:genvarname
已弃用。【参考方案2】:
ldueck 在评论中已经提出使用sprintf
,但我认为这是值得回答的:
f(i) = sprintf('f%d', i);
在我看来,这是最易读的解决方案,并且还提供了一些很好的灵活性(即,当您想要对浮点值进行四舍五入时,使用类似 %.2f
的东西。
【讨论】:
【参考方案3】:尝试以下方法:
for i = 1:4
result = strcat('f',int2str(i));
end
如果您使用它来命名您的代码生成的多个文件,您可以将更多部分连接到该名称。例如,扩展名在末尾,地址在开头:
filename = strcat('c:\...\name',int2str(i),'.png');
【讨论】:
【参考方案4】:让我添加另一个解决方案:
>> 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'
【讨论】:
【参考方案5】:您可以使用strcat
连接字符串。如果您打算将数字连接为字符串,则必须先使用num2str
将数字转换为字符串。
此外,字符串不能存储在向量或矩阵中,因此f
必须定义为cell array,并且必须使用 和
(而不是普通的圆括号)进行索引。
f = cell(N, 1);
for i=1:N
fi = strcat('f', num2str(i));
end
【讨论】:
类似“f(i) = sprintf('%s%d', f, i);”的东西也可以。 我的问题是没有使用大括号来索引['f', num2str(i)]
有点短。【参考方案6】:
根据this 看来您必须在尝试使用它之前设置“N”,并且看起来它需要是一个 int 而不是字符串?不太了解 MatLab,但只是我从该网站收集的内容..希望它有所帮助:)
【讨论】:
以上是关于如何连接字符串+ i?的主要内容,如果未能解决你的问题,请参考以下文章