Convert string to cell array

1,171 次查看(过去 30 天)
Artyom
Artyom2014-8-31
评论: Image Analyst ,2021-4-17
How to convert string
a b 3
into cell array {'a' 'b' 3}

采纳的回答

Geoff Hayes
Geoff Hayes 2014-8-31
Artyom - try using textscan to read the data from the string. Something like
str = 'a b 3';
Z = textscan(str,'%s','Delimiter',' ')';
Z{:}'
ans =
'a' 'b' '3'
We use the fact that each character in he input string, str, is separated by a space. The space then acts as the delimiter between each character which we can use to separate each into its own string.
Note that Z is a 3x1 cell array.
Try the above and see what happens!
  2 个评论
Geoff Hayes
Geoff Hayes 2014-8-31
You're right - I hadn't caught that! I just assumed that since the input was a string, then the output would be the same.

请先登录,再进行评论。

更多回答(3 个)

CHADCHAVAN RATTANASOPA
cellstr()
  2 个评论
Image Analyst
Image Analyst 2021-4-17
@Souarv De, why "Good"? This answer is wrong. Just look
str = 'a b 3';
ca = cellstr(str) % CHADCHAVIN's wrong answer
Z = textscan(str, '%s', 'Delimiter',' ')' % Geoff's answer
celldisp(Z)
ca =
1×1 cell array
{'a b 3'}
Z =
1×1 cell array
{3×1 cell}
Z{1}{1} =
a
Z{1}{2} =
b
Z{1}{3} =
3
CHADCHAVIN's answer does not give a cell array with three cells (each one containing a substring). It gives one cell (not 3) and it simply put the string into the one cell. Not what was asked for.
It must have been accepted by mistake so I'm going to unaccept it and accept Geoff's instead.

请先登录,再进行评论。


Image Analyst
Image Analyst 2014-8-31
Try this:
str = 'a b 3'
str(str==' ') = []; % Remove spaces.
ca = {str(1),str(2),str(3)} % Create the cell array.
celldisp(ca); % Display its values in the command window.

Martin Vatshelle
Martin Vatshelle 2019-3-25
编辑:Martin Vatshelle 2019-3-25
If you have a mix of text and numbers textscan as suggested by Geoff is a good solution.
If you only have text strsplit does exactly what you want and I feel that is a bit simpler to use.
strsplit('ab cd ef')
ans =
1×3 cell array
'ab' 'cd' 'ef'
You can specify the delimiter if it is not spaces that are your delimiters.
If you however want to split a string into single characters you could use cellstr
s = 'ab cd ef';
cellstr(s(:))' %here I transposed at the end for readability, you can skip that
ans =
1×8 cell array
'a' 'b' '' 'c' 'd' '' 'e' 'f'

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by