sprintf to cell array
이전 댓글 표시
How can I make sprintf output a cell array, with a nice vectorized notation?
When I have:
C = {'a','b'}
Output = sprintf('Letter:%s\n',C{:})
It becomes a char of length 18. Simple workaround would be a loop, maybe scan with a separator, or a solution with cellfun and anonymous function should work as well.
But is there not a nice straightforward vectorized solution to this? My first guess would have been something like:
Output{:} = sprintf('Letter:%s\n',C{:})
Which does not work.
Thanx in advance Sven
채택된 답변
추가 답변 (3개)
Enoch23
2019년 12월 12일
3 개 추천
Addendum: Starting in R2016b, the main functionality of sprintfc (excluding sprintfc‘s 3rd [isImaginary] input flag, and its 2nd/3rd output args [errorMsg and isLeft]) is included in the new fully-documented/supported function compose.
I thought I would post it here, as that is exactly what I was looking for. Maybe others looking for the same answer will come across this page.
Guillaume
2016년 9월 1일
In my opinion, the cleanest way to do what you want would be:
C = {'a', 'b'};
output = cellfun(@(l) sprintf('Letter:%s', l), C, 'UniformOutput', false)
It may not be the fastest, but it clearly shows the intent and does not involve using undocumented functions that may change behaviour in the next release or just disappear altogether (or just reformat your hard drive given this one particular undocumented input, who knows?).
Not that if it's just single characters that you're passing to sprintf (as the 'Letter' string would suggest, then %c may be more appropriate. In that case, you also don't need to use a cell array:
C = 'ab';
output = arrayfun(@(l) sprintf('Letter@%c', l), C, 'UniformOutput', false)
Perry Orthey
2016년 9월 1일
You could use strsplit:
C = {'a','b'};
Output = strsplit(sprintf('Letter:%s \n',C{:}));
Although this gives you one empty cell at the end.
카테고리
도움말 센터 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!