|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
4 S: Y& F/ S9 ^$ @6 \) t, Y u
用importdata和textscan读取内容为字符串的txt,结果为cell型元胞组。1 O8 g- h7 |9 E# s# E! r
) E/ V- L ?# a# {; y$ A3 D: \* r. G6 h
我想把cell变成char型,然后就自然地想到cell2str,遗憾的是matlab中没有这个函数。( i; D2 G& \! M2 t# K! ~
" I: X2 F+ `! I# b+ w就像没有str2cell一样。, |1 A4 k0 y3 i9 e8 ]- O4 @% x5 s N
9 j4 k9 w: \9 E7 I$ l# Y0 N+ p/ U
实现str2cell功能的函数是cellstr,将字符数组转换为cell型字符串数组3 O- h3 R- E' {# S8 F
- l1 n: z, b: _( R( h. I8 q2 _* q
函数语法为c = cellstr(S)
, a0 t! z- { y- U1 g: ^; O& e( e% J
$ M' t* |! P& S" ]它的作用是:将字符数组S中的每行分割成为cell细胞元组C的一个元素。并删除S的每行尾部空格
; A/ n, b1 _; j1 q+ y+ f) i( a
& u9 K# I0 i/ @! L8 {% j2 T正好与char相反,char是将cell字符串数组转化为字符数组s=char(c); x% J3 _! G1 @
7 w1 g+ ~+ _8 H( N
/ _' l0 j5 w: a* U6 O3 s7 {
( L9 k% z T& A7 Y7 ?1 Z; }3 K ! s5 u p, K9 v* e+ N% ~' c
) P4 v& ]0 k( a3 R) j
很多人分不开字符数组和字符串什么区别。
- v7 o# H3 O( L& I$ y+ p>>str1='i love matlab' % 这是一个字符数组,也是一个字符串7 _/ p* O' F5 K2 \. i1 M0 Z9 p
str1 =' B1 D/ H5 q) T
i love matlab5 b8 E8 ~( C& r9 J& t+ u
8 D6 n0 k% f* c7 g d+ _: C>>str2=['I ';'am ';'a ';'boy'];% 这是字符数组,由于是数组,所以每一行必须具有相同的列数(字符数相同),不够补空格: v# s3 b7 E# @* J+ H$ f
str2 =
6 S6 }" D# u& J2 k4 J$ l8 cI; m8 T1 [" \' O2 |. a% h
am
' P e! ?( p1 S5 T* G) b. S( ^a3 G2 d8 G9 f/ R
boy
; s- I$ x+ W- l: K8 @- ^ Y
+ w# x/ W* v$ v; ?; i/ ] f; ]7 n/ T# `由于字符数组必须满足每一行具有相同的字符数,所以输入时很麻烦。通常情况我们使用char函数来完成自动补充空格或者创建字符串cell细胞元组。8 P9 F/ ~% w& g6 p0 x) Z
>>char('i','love','matlab') % char函数会自动补充空格+ I5 {3 d6 F7 @. i! D
ans =
2 o& L& l0 ` m+ n# ^9 C& Zi
& z! o' W7 E3 Mlove
0 i+ `: w- \6 r. ?9 ^$ _6 L# \; \matlab; ]5 P! u6 e% [" ?1 X
_- ^; W1 L3 R
>>{'i','love','matlab'} % 在cell字符串中,每个单元都可以完全不同的内容,所以,不需要补充空格。
4 m2 o1 V, u7 r. D( Ians =0 c: l+ s5 l6 n% z) {( I: [
'i' 'love' 'matlab'1 C7 Q( W. [3 A5 ?7 Y
; b# N- e7 E4 ~! h
; s* z/ E8 u( z$ \* r' w
' y1 R5 |+ [+ q, G* r: J- {
. v, {: I8 P9 U4 ~下面来看几个例子: {) A' k& G/ |, N2 i1 E6 ]. t; o6 ]$ _
$ F, W% X+ u/ c! W例1:创建一个字符串数组,记住补空格
) V; |% M6 S6 _+ y! I>>S= ['abc '; 'defg'; 'hi '] (下划线代表空格)$ x% H) l( B9 b( x1 \9 j
S =
* {, }8 X* W0 x7 E- sabc- }& y0 X2 e$ Y {9 _) J* A' D$ p
defg
% Y( R8 I$ @7 thi
* D6 s3 a9 c1 j
4 k2 {/ b* k' {- T2 h>>whos S- t' g* J5 Q/ @. a) z+ `* Q$ |) |
Name Size Bytes Class- i0 `8 H/ W+ k3 F' V0 O& O+ t
S 3x4 24 char array
( y& x. r9 W" k0 J6 e0 O% ~1 D7 _# x- V" ^0 C- y, O. j
例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :% c0 j ~ C! {/ B, |/ N2 r0 ]( d
>>c = cellstr(S)
0 g! J; ~4 L3 {* Mc =# x2 p$ l' c8 g! i+ _. R
'abc'7 p) O4 q3 r, v0 K, s
'defg': T2 d B3 n% b8 d
'hi'8 p6 h3 g- f' m: ]* ~& E" l" z
5 I& L3 d. m7 V& X$ O>>whos c
- P9 D6 g- V7 AName Size Bytes Class6 T( K. ]3 J/ W+ v
c 3x1 294 cell array
9 p" W O; r J# p2 v0 t
& ~$ Q( z6 i; O6 l1 E例3:再使用char函数将cell字符串转换为字符数组
. q, D; l: \8 {4 ^5 Y% X>>char(c)
9 [/ Y$ P9 E) p4 ?5 h1 ?, q* O- _ans =
3 A, [% L& _9 |# kabc$ f P) D8 \+ O0 p- K6 L
defg) h* `& A- Z! Q' t1 e6 O' D+ o
hi, ~9 ]- i) `5 [2 J
2 L# A D! W7 `' B( p8 C+ Y$ s
>> whos ans
: F `, ]! n5 F" p w4 yName Size Bytes Class Attributes: A" v+ Q, }7 x
ans 3x4 24 char |
|