| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
4 R9 }. y. \6 e1 F3 `3 g 
用importdata和textscan读取内容为字符串的txt,结果为cell型元胞组。' M: x2 Q1 ?& C+ q 
 
9 p! q* K6 b+ P5 `2 g2 M' h0 d/ Q我想把cell变成char型,然后就自然地想到cell2str,遗憾的是matlab中没有这个函数。 
' d1 o) Z, k3 T& x! D( R0 p- K5 P1 y; M$ ]# Z0 m 
就像没有str2cell一样。& q/ l( i1 ^$ a- Q+ T) i 
 
4 T! Y" m/ M& Y, U, M3 r实现str2cell功能的函数是cellstr,将字符数组转换为cell型字符串数组 
% D$ u) U" t3 M: [ 
4 X, H% Q2 ^  p6 O函数语法为c = cellstr(S) 
# U; H0 l$ [$ {8 G* C8 R: x$ G+ K) o$ }0 j% ^( ~) M) T 
它的作用是:将字符数组S中的每行分割成为cell细胞元组C的一个元素。并删除S的每行尾部空格 
' A8 m4 e3 @5 i: }6 v. d0 ~% a" b2 {0 b: W2 |7 ^9 T6 ^ 
正好与char相反,char是将cell字符串数组转化为字符数组s=char(c) 
6 Y& _: |7 ~& v4 \5 b9 z9 y2 ~" _# t& n$ X8 P6 | 
 4 Q+ Y& _$ K3 t. @ 
 
! L. i' I6 X: u$ n3 V  
% b2 }  x$ A4 v1 J 
) [8 M. ~! C( A' a& g4 H0 x' g很多人分不开字符数组和字符串什么区别。# K/ r/ a9 L9 X/ `% c5 {" F& P 
>>str1='i love matlab' % 这是一个字符数组,也是一个字符串 
0 v% S5 q, h) l1 }; t. A8 `str1 =' r8 @. ?% C' c  L* B5 a" q 
i love matlab 
9 k* t8 c% f6 M" k9 f2 [3 G8 V' ^+ d; S 
>>str2=['I ';'am ';'a ';'boy'];% 这是字符数组,由于是数组,所以每一行必须具有相同的列数(字符数相同),不够补空格 
  N% n2 b4 G$ q* N; wstr2 =! w" \1 L# m8 l9 x" b( g% i; L# Z 
I 
# R5 D3 P* _8 Wam 
+ l1 m. Y- X6 K" p7 f1 ba) w1 ?; e7 ?) V8 f5 [ 
boy. F8 c% ^8 L2 b" O% w$ e. x 
 
' R0 A- v" Q) _% \由于字符数组必须满足每一行具有相同的字符数,所以输入时很麻烦。通常情况我们使用char函数来完成自动补充空格或者创建字符串cell细胞元组。 
$ o+ }9 r) t7 v% d! V% c6 ~4 K" J- }>>char('i','love','matlab') % char函数会自动补充空格 
: ~' r( H' v+ F2 xans =8 L8 K" ^" F" V5 R/ C 
i 
. ?1 t* I4 V% P6 ?& Blove 
$ k5 O$ x! @! T+ p4 Wmatlab! W! X2 h9 `9 c. q* g 
 
: i) h8 B% c! ~& S0 A>>{'i','love','matlab'} % 在cell字符串中,每个单元都可以完全不同的内容,所以,不需要补充空格。+ _8 \/ n7 Q! x 
ans = 
% X# [% d; D" r. D'i' 'love' 'matlab' 
' c3 C' X2 N% n& k9 d 
2 \1 l5 X, f$ @0 j0 X  
, Z6 Q' c# l" ]9 j9 ^3 v 
) B) E. m7 a6 u& k; B3 R8 U# e) H& e) M, w0 N  J 
下面来看几个例子:: D- m. T) @1 n( [ 
 
. W5 a. k4 P* l例1:创建一个字符串数组,记住补空格& z4 _  ?: t& ~0 ` 
>>S= ['abc '; 'defg'; 'hi  '] (下划线代表空格) 
; p; n$ r5 R3 m# F4 nS = 
, d' x1 q( O4 R- w( zabc 
" V/ ]& K* e' N5 P9 d4 O$ j! J9 adefg! D7 S8 i' f" h% h7 o3 | 
hi9 {+ L- x9 R5 g  B5 P) i' y# z 
2 X& g' }( \/ P2 w2 d3 o/ E- f" Y 
>>whos S/ I, r  d# ]  K( p9 ]$ T% W 
Name Size Bytes Class 
% c& V2 B/ J; sS    3x4  24    char array/ v$ o- \, Z0 t4 f. |0 ^. R 
# Y# }+ W  L9 f' l9 C+ j- r2 T) f* f 
例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :2 v7 `3 o# m; I6 X5 `6 Q0 m. w2 Y0 P 
>>c = cellstr(S) 
; s5 m; F$ L% @2 A/ pc =) {0 v# R5 ?8 e# ` 
'abc'4 C4 c$ o) Z, @* { 
'defg'! L7 Q5 r' O& P) z- |  ]8 P 
'hi'5 n9 t+ Y0 b7 W; I0 L/ L 
( @: Y" N, F4 U7 Y3 ?2 |% S5 P4 Y 
>>whos c' {2 Y" a. J& W 
Name Size Bytes Class 
- {/ {9 ]# [1 Q4 Q; u6 c+ p7 qc    3x1  294   cell array 
( Z  f& X  [7 W. U7 \1 A& j7 j7 ?0 D6 C8 Z3 Q* ^ 
例3:再使用char函数将cell字符串转换为字符数组% a3 o# r- q# x 
>>char(c)- K7 z2 g  d! Y* T; p$ L+ E 
ans =% d% c/ G+ J5 Z3 G 
abc5 s2 I6 @3 [8 V) x8 A5 N0 Y( ` 
defg; Y6 v, G  G) ^" M7 Q  ], F 
hi 
/ l5 J+ Q5 a& B. x0 d 
" k% J  K4 n* Y# l  B1 y9 D1 g>> whos ans 
# Z% {# g* M$ f" }: D, @1 \Name Size Bytes Class Attributes6 K8 t) N$ e+ r" i7 I: d 
ans  3x4  24    char |   
 
 
 
 |