|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ k. l' [6 k$ ^/ P+ o* E
用importdata和textscan读取内容为字符串的txt,结果为cell型元胞组。6 s( C; N0 W9 c2 _5 q
% L! ?: A. k J4 z) j0 P1 _
我想把cell变成char型,然后就自然地想到cell2str,遗憾的是matlab中没有这个函数。9 r% R5 m, X* C9 O
- n _+ T" `6 k1 z* f就像没有str2cell一样。' e" v9 J( s |$ f4 ^7 w3 {
( W, a' _) E8 ?8 K- n
实现str2cell功能的函数是cellstr,将字符数组转换为cell型字符串数组8 Y9 i9 j& J" ~$ W, g
6 ~' i3 W& w! `+ C- n; I函数语法为c = cellstr(S)
$ {3 l3 l/ D2 G) H: b( ?; s( z3 B9 _( D
它的作用是:将字符数组S中的每行分割成为cell细胞元组C的一个元素。并删除S的每行尾部空格
3 G6 [" J1 I* K1 E8 d0 \% N+ l# w/ l/ k
正好与char相反,char是将cell字符串数组转化为字符数组s=char(c)9 }& x/ k& Y' e1 j0 L
) f' [" L- ?, [: \% I
7 |- l+ s9 X$ K/ P1 t) I B6 u% R( T! }: ?; d/ h
8 ]8 V1 }3 u W; y0 Z# d. o+ l/ l" ?2 H% @2 ]6 T; y
很多人分不开字符数组和字符串什么区别。
6 y0 P. ]0 U+ ^% Z/ E8 y>>str1='i love matlab' % 这是一个字符数组,也是一个字符串' |& `- s( o C# k* U6 |
str1 =6 [) l, J' L9 F, g6 |% D
i love matlab
3 ~$ i" P( G8 j2 U
$ F* P+ V, b* F/ ?% Q1 k>>str2=['I ';'am ';'a ';'boy'];% 这是字符数组,由于是数组,所以每一行必须具有相同的列数(字符数相同),不够补空格
' G. s$ p5 r; h7 Z9 j% |0 ]str2 =- |0 L5 |5 T: b8 \$ S; I
I
. s O, g I! Yam6 H' L# {" P, D1 p; }6 M' ^* t
a! s0 u- y, i6 \+ J! B
boy
3 f8 z& @* J/ c! S2 R, m( s* V7 h% o( z6 C# h
由于字符数组必须满足每一行具有相同的字符数,所以输入时很麻烦。通常情况我们使用char函数来完成自动补充空格或者创建字符串cell细胞元组。
( X- W# Y1 d4 u* x>>char('i','love','matlab') % char函数会自动补充空格
4 d% K8 f* r8 tans =, C6 o$ D5 @4 j" J7 [$ O5 ^3 S
i( r9 L! P& p9 x! e5 o, X3 F- f
love
+ m6 d* _% b* d7 h- C' Mmatlab
/ p" K* z- e4 H7 V( `8 F+ Z" z6 q
$ h, R, W6 c' _0 s) z>>{'i','love','matlab'} % 在cell字符串中,每个单元都可以完全不同的内容,所以,不需要补充空格。
7 B" e, k0 I* K3 Cans =# E/ X6 v9 C$ ~+ h% a8 j
'i' 'love' 'matlab'% k' g, V) @2 q: ?
; h# d4 e- {* M' { G
# J0 w+ ?1 G0 q5 ?/ D$ M$ Y; K
( S! W4 ^3 B. l% D N+ ~% `
% p, D V: W0 B% ?! F9 R9 r' B8 r$ r
下面来看几个例子:
' _8 W' x M- X* I4 D4 e/ M- ~
" p' @% K. U l* _3 Z r/ Q例1:创建一个字符串数组,记住补空格
8 c! z; \: c( n" N6 u! L9 k5 I>>S= ['abc '; 'defg'; 'hi '] (下划线代表空格)
& r# r# k0 h2 y6 R+ }6 }- s+ JS =. w( f% a% w, p1 z
abc o5 C! s) y h: U( U
defg6 O+ `2 T/ M3 n" {! m3 [- s
hi* S% E% Z0 t! [. ^6 C& K0 i
5 I+ Z' w4 g8 I- I, J
>>whos S' c6 D1 l& o) z, ~. i, ^
Name Size Bytes Class
0 |' y/ [) P% |S 3x4 24 char array
2 O7 S5 X/ O4 j% ~& r- K; y {/ }0 a4 ?- J. F5 M
例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :
' x5 J4 {% C4 R' L7 ~6 M" f>>c = cellstr(S)
. V6 Z7 {: G% Y7 S; y5 C1 Mc =
4 s1 X( e/ }1 @ j'abc'* a5 J u- o! g
'defg'4 U3 O2 t" h$ M% W) b4 o
'hi'
% L; P: w. G' N9 }# s" x! y; C( y, ?& N
>>whos c& Q- z# g$ {- i( j
Name Size Bytes Class
L7 J( b+ {" t* {8 v8 ?4 bc 3x1 294 cell array3 e [% D+ ^2 P5 {/ x) F& \
- I6 f+ f& J! g0 Q# u! m
例3:再使用char函数将cell字符串转换为字符数组
, i4 s. t) B3 I>>char(c)
' m3 u: V9 H& f' P& y: L0 Tans =% i) M- M2 Y" `+ F: J
abc
4 t* ~8 W5 o4 h+ T; F+ W9 edefg1 w6 o) E! `1 G2 ]/ w% u1 {& x# a! D
hi
) ]' d3 n- k' S6 z+ o+ L1 h
: N% f9 b2 c: m( Q# n4 H( O>> whos ans. s5 f! b& H4 O) j8 Y( y o/ V( |6 B
Name Size Bytes Class Attributes6 G% K, ?$ p9 f+ }: f, u5 `4 H* R5 X
ans 3x4 24 char |
|