EDA365电子论坛网

标题: Matlab里的cell和char&字符串与字符数组 [打印本页]

作者: uqHZau    时间: 2020-3-20 09:37
标题: Matlab里的cell和char&字符串与字符数组
( N% [* W4 ]/ b5 ]) Y, F% `
用importdata和textscan读取内容为字符串的txt,结果为cell型元胞组。
+ i/ m7 }4 f2 [! U% m" O! V
; Y+ k* F2 w2 j+ f3 e! ?' b& K4 I, L我想把cell变成char型,然后就自然地想到cell2str,遗憾的是matlab中没有这个函数。
5 L, ~0 J  |* }" ?8 P& M6 B) R0 {. s+ d0 Q. c1 F
就像没有str2cell一样。
6 k  z" J/ d& F* U9 `- E4 T9 O. ^& o, \" N: T; B
实现str2cell功能的函数是cellstr,将字符数组转换为cell型字符串数组- x& ~# c% y9 _  {
% K. L* C; h* @$ `$ U
函数语法为c = cellstr(S)
+ Z) I: D, a' u: \: [
+ Z' \3 b2 h  x它的作用是:将字符数组S中的每行分割成为cell细胞元组C的一个元素。并删除S的每行尾部空格
+ Y6 }, \2 L2 d) j0 y$ ~
* Q$ Q* d6 u/ q' \8 G) U正好与char相反,char是将cell字符串数组转化为字符数组s=char(c)
; a9 M+ S1 h5 I
1 N5 u4 e2 \6 Y+ d" d9 j) ~
/ U# U% Y! {1 o- N2 s$ Y
1 B& E- e! g; r+ |8 j
  X' L  g; e0 L- U: R
( X* x* c" f5 I. C, n很多人分不开字符数组和字符串什么区别。8 N# p4 i; N" q! X, o# L1 s
>>str1='i love matlab' % 这是一个字符数组,也是一个字符串5 b3 L" K2 Z! Z) v
str1 =
0 b6 u" y  q0 T& w# `- qi love matlab
  M- \2 E1 S' h4 p# @; Q7 q
2 {- H  V# l4 t0 y3 |>>str2=['I ';'am ';'a ';'boy'];% 这是字符数组,由于是数组,所以每一行必须具有相同的列数(字符数相同),不够补空格
7 W6 K0 e* e6 \$ estr2 =
" @- q! E% @; ?/ C* ^I
7 Y* I8 N, z7 X( Nam
6 z% ]  w. ]' _$ n* Ca
" [- p' s; @6 K' W, X; Vboy
$ R) L+ S$ _8 `* o+ p' l( M8 @- `; Z1 o) k1 E% i  {
由于字符数组必须满足每一行具有相同的字符数,所以输入时很麻烦。通常情况我们使用char函数来完成自动补充空格或者创建字符串cell细胞元组。( ^3 Q- `! _: f
>>char('i','love','matlab') % char函数会自动补充空格
8 ?4 [, A, ~$ |- ]1 O  T4 ~% lans =3 x6 n* ?; w+ X0 v
i; j! M% s) u$ i2 R/ K6 g
love
( ?% r) J. h) C  Imatlab
" Y# ?/ D  A# ~/ k8 a% _* ?. u; f& O) l
>>{'i','love','matlab'} % 在cell字符串中,每个单元都可以完全不同的内容,所以,不需要补充空格。1 A* `# k- H$ Z+ S
ans =5 q# f: {: v+ k- u, E
'i' 'love' 'matlab'
9 G5 Y7 h8 }  B8 z/ v# J+ l+ v# T& a% h8 F+ c( f( `
% E) S  @. A  s8 k( ]% ^+ B! m
3 \& ?* ^! u; u& w2 e
6 U8 X4 {( P" _0 A0 P3 J
下面来看几个例子:; d# A1 S" `1 w( c6 e: B9 V, ]

6 N8 @- F/ {  l$ y- @# ]0 u例1:创建一个字符串数组,记住补空格
  F8 c" a: Y5 ^. ^6 G, w>>S= ['abc '; 'defg'; 'hi  '] (下划线代表空格); x/ N1 C9 d* e& f6 D! D7 h
S =
0 D1 |) c, `$ \$ y7 fabc; N0 u2 V' m- h, S
defg0 Q' R9 C8 H7 a& H& g  Z! M
hi5 V' h) O* K6 @* Q

/ g7 T. P1 Y5 B% c>>whos S
# b3 Y# I3 B5 Q% S4 sName Size Bytes Class
, H8 S8 O) x$ t" q* ~% S# h6 _S    3x4  24    char array; n8 O4 k% x% f: h% `
' F6 v4 J# D! B" s, r8 d
例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :
! k8 ^, e% t! v8 y8 F/ a4 a: z>>c = cellstr(S)
' h. H. h0 I, f' ^; w: R8 ^4 g  @c =
+ N/ u% X. a7 S( ?; k'abc'7 ~- K* D- x$ X( T" h4 K
'defg'7 w6 }8 `: W' B4 S, C. {. R
'hi'
5 E4 Z% k2 i: c' }
4 D3 a; Q( R2 r" i$ s& D>>whos c
7 U, F, v7 @+ gName Size Bytes Class9 q6 s/ X2 m$ Q8 y
c    3x1  294   cell array; v0 M6 H$ [) B1 f' n
/ f' S. s% \+ x% Z) ]
例3:再使用char函数将cell字符串转换为字符数组9 z# T+ i( m. A6 d$ d
>>char(c)8 m/ f8 S/ {: `
ans =
0 s/ E3 @  g1 D% c; labc
4 |. o1 q7 R2 Odefg# e- a& z% }& z9 I6 O7 C
hi8 Q) e, O# Z# c6 @" A$ g( F
8 |) z2 ]' M9 F: f, {
>> whos ans. s8 X% ^2 D: N5 s- V
Name Size Bytes Class Attributes
8 S, H: f# f/ z. j. z. Eans  3x4  24    char
作者: yin123    时间: 2020-3-20 18:09
Matlab里的cell和char&字符串与字符数组




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2