|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
% o& _+ ~6 B Z! B$ _1 F1 \& I
用importdata和textscan读取内容为字符串的txt,结果为cell型元胞组。" J% k! i) U. A$ }, v' Q$ R* q3 D
! o5 D6 }7 F) i! f9 }1 U+ J我想把cell变成char型,然后就自然地想到cell2str,遗憾的是matlab中没有这个函数。
; c" Q& [4 y" K+ v; {
6 ^7 f$ d" W. T1 z就像没有str2cell一样。
4 i0 k o' C6 W
& W! Y! R6 f- e. A( j实现str2cell功能的函数是cellstr,将字符数组转换为cell型字符串数组
6 R- E& E+ P+ [# c
/ Y5 H7 T) K Z6 f函数语法为c = cellstr(S)
- z6 ?7 r& c" O9 a9 H, X. @
3 V# L8 [! Q, S它的作用是:将字符数组S中的每行分割成为cell细胞元组C的一个元素。并删除S的每行尾部空格
3 `' L" X! u* x1 V* q% X. ?. k# [8 @; Z5 `5 t7 N- o
正好与char相反,char是将cell字符串数组转化为字符数组s=char(c)6 z( L2 v6 P* j2 N! q, s
; g- `& s0 Z- w
: ]- @- L7 |4 ~ S" F% ?6 G. z
b D5 x3 @3 T5 B: W' y
. p0 ]% y% D8 f
4 c Z/ E4 k6 I, k$ n$ X1 y很多人分不开字符数组和字符串什么区别。! {& P! V3 i6 N4 g; z5 h F1 ]
>>str1='i love matlab' % 这是一个字符数组,也是一个字符串' t; \0 v+ a) s+ j R
str1 =. b+ ^1 z: A# {
i love matlab' ]4 E* E5 T; y" @/ ?
5 C# e! b* U; {* d* d) U# \
>>str2=['I ';'am ';'a ';'boy'];% 这是字符数组,由于是数组,所以每一行必须具有相同的列数(字符数相同),不够补空格; P1 B9 Q* c( h( e% V2 G
str2 =
, W( [9 ^2 _4 s& y( I uI8 m1 u- e) y" e) b' o. k% N
am
( y" Z* x7 c |7 ^a
5 s2 a3 J- `/ e' |3 O5 ?boy% \0 t4 _# X7 e- R' C D. P/ r2 w3 x
- i. B4 x2 g3 k* C- W8 a
由于字符数组必须满足每一行具有相同的字符数,所以输入时很麻烦。通常情况我们使用char函数来完成自动补充空格或者创建字符串cell细胞元组。
' }; `' X9 ? p: z! f0 m>>char('i','love','matlab') % char函数会自动补充空格
5 v% q5 ?0 ~' d! b9 B$ Tans =0 L* ?# b. N; x' w0 n b
i
. z( F* R2 X# M+ ?love
@3 `5 G( t" u! V- |matlab" b' i) ~ {! k' {6 q
; m) ] t, T S3 i1 U* C% }>>{'i','love','matlab'} % 在cell字符串中,每个单元都可以完全不同的内容,所以,不需要补充空格。
/ \6 b: C# J6 T1 i3 R9 \ans =
6 s; ?# A( i0 `'i' 'love' 'matlab'
" f2 z+ c! }" C, v" t K% j p/ {$ g- d a! G6 A
1 ]3 r6 m- v& K" k# ]5 ^$ G
1 l' H. }" l4 A, E6 _. q! ], J
7 e8 O- Z! R4 k; ]. ^5 A2 }+ Y3 ]下面来看几个例子:8 J: g0 A& @& n* b0 Q$ P3 T
. i3 B- ~/ e9 [6 c, g7 b
例1:创建一个字符串数组,记住补空格( `3 w7 k# |! \ V$ H
>>S= ['abc '; 'defg'; 'hi '] (下划线代表空格)
: ?* r* J; H# n" ]+ fS =
* s7 E+ w) P5 j8 kabc0 @0 d5 B5 L' R: e
defg& L2 Y: C: c. f. j
hi
% A w& ^* j% Z" o) M" u2 f) D# d5 w8 r$ q- G" q* N D
>>whos S- a6 p1 `: ]3 s' S) O" D4 M
Name Size Bytes Class, g- r6 V/ t( m5 k0 K
S 3x4 24 char array9 d$ k7 Y7 Y. S$ C
) i' o' [" v2 E" h/ Z7 C* _5 I: y" P例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :; f) c% i M: L; C5 u: Z$ @
>>c = cellstr(S)
' H3 ~- P! Y; B! K9 Kc =, O" C+ P% d1 o, I8 k0 C" X! b5 Y6 @
'abc'; t( O7 C. z% n7 N
'defg'
0 u3 p- G, Q' I9 t'hi'
- n% E/ E7 O8 e% G6 F6 T" L& ~5 x$ O# Z& t4 T
>>whos c- s3 i- f( S/ ~6 Y9 F: K
Name Size Bytes Class
- l* g0 L5 V/ c D$ g" _4 l% D& S7 ic 3x1 294 cell array
* w4 N# J$ M% e) ]/ L$ K6 `1 L0 @4 O# \4 S/ T
例3:再使用char函数将cell字符串转换为字符数组
# f- g! x, N9 h1 `4 j>>char(c)7 w, L# Z8 W( Q# n. P' c
ans =
9 U. w4 H4 V2 i; i7 h; Habc4 C0 L2 j, }& O* }
defg! s( ]/ w8 G5 }, W2 s3 R
hi
5 d6 D- u4 R8 S1 {9 J. t. R" s$ R9 J) O1 e- r5 }. x5 a" Q
>> whos ans. r4 h' S$ d( G, d& Q8 d
Name Size Bytes Class Attributes
+ U0 R1 a2 _9 b" y: qans 3x4 24 char |
|