Как объединить строку + i?
for i=1:N
f(i) = 'f'+i;
end
дает ошибку в MatLab. Каков правильный синтаксис для инициализации массива с N строками шаблона fi?
похоже, даже это не работает:
for i=1:4
f(i) = 'f';
end
6 ответов:
вы можете объединить строки с помощью
strcat
. Если вы планируете объединить числа в виде строк, вы должны сначала использоватьnum2str
для преобразования чисел в строки.кроме того, строки не могут быть сохранены в векторе или матрице, поэтому
f
должно быть определено как ячейки массива, и должны быть проиндексированы с помощью{
и}
(вместо обычных круглых скобок).f = cell(N, 1); for i=1:N f{i} = strcat('f', num2str(i)); end
для версий до 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'
позвольте мне добавить еще одно решение:
>> 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'
по данным этой похоже, вам нужно установить "N", прежде чем пытаться использовать его, и похоже, что он должен быть строкой int not? Не знаю насчет Матлаба, но только то, что я собрал с этого сайта..надеюсь, это поможет:)
попробуйте следующее:
for i = 1:4 result = strcat('f',int2str(i)); end
Если вы используете это для именования нескольких файлов, которые генерирует ваш код, вы можете объединить больше частей с именем. Например, с расширением в конце и в начале адреса:
filename = strcat('c:\...\name',int2str(i),'.png');