EDA365电子论坛网

标题: 了解一下Matlab中的cell和char,字符串与字符数组吧 [打印本页]

作者: thinkfunny    时间: 2020-4-22 09:45
标题: 了解一下Matlab中的cell和char,字符串与字符数组吧

用importdata和textscan读取内容为字符串的txt,结果为cell型元胞组。

我想把cell变成char型,然后就自然地想到cell2str,遗憾的是matlab中没有这个函数。

就像没有str2cell一样。

实现str2cell功能的函数是cellstr,将字符数组转换为cell型字符串数组

函数语法为c = cellstr(S)

它的作用是:将字符数组S中的每行分割成为cell细胞元组C的一个元素。并删除S的每行尾部空格

正好与char相反,char是将cell字符串数组转化为字符数组s=char(c)

很多人分不开字符数组和字符串什么区别。
& `1 M  g' Q7 o: L>>str1='i love matlab' % 这是一个字符数组,也是一个字符串4 j  Z$ Z! X; L' P
str1 =
: a% F  V; G+ o( V; Bi love matlab+ J2 G+ q; k/ T& Z& O! h/ ^
' m7 x' y3 f/ H. ^. u" E
>>str2=['I ';'am ';'a ';'boy'];% 这是字符数组,由于是数组,所以每一行必须具有相同的列数(字符数相同),不够补空格6 Z* J9 \2 n( O# p0 c
str2 =4 ~+ Q5 e# v& c+ y1 Z, X. N# A+ s9 a
I* \' P& w/ K) n7 L* K
am7 G" @) _8 \1 X; C1 o. @4 w6 h
a; G: G7 B) O0 Z8 v/ D: q! Y
boy& e  F4 A) D/ r- F: B' P, x  p# [
2 E  x. k; z! N. E- ~
由于字符数组必须满足每一行具有相同的字符数,所以输入时很麻烦。通常情况我们使用char函数来完成自动补充空格或者创建字符串cell细胞元组。
0 I/ b& w0 I, k" A* l>>char('i','love','matlab') % char函数会自动补充空格2 u- w6 w; g* E) Y) i0 I4 J. h
ans =
  d- P' B# Z3 K9 v3 P6 y+ mi
* S- K# z- U) _: \$ R1 K4 Alove
  C( F  b6 t" W' t. pmatlab
: q0 e5 B+ A8 U" s0 K) q, h( G" I  Y+ ^$ y5 B
>>{'i','love','matlab'} % 在cell字符串中,每个单元都可以完全不同的内容,所以,不需要补充空格。
  D9 ^$ \4 o/ _. r( g0 `" X- e2 Vans =
. d* h# a4 b$ b- J2 E9 P  c/ L'i' 'love' 'matlab'


( w$ x4 o. U& q6 k下面来看几个例子:

例1:创建一个字符串数组,记住补空格" Y( c/ F; y( L6 h% L( t1 [
>>S= ['abc '; 'defg'; 'hi  '] (下划线代表空格). ^, w9 {7 A; _( k: e8 @
S =* C- h3 r) v1 e$ W& Q
abc' l6 E4 T4 l& f+ X4 v$ t
defg
) M% {2 y# g; P" c/ r3 }1 P' z0 Xhi
& i, E8 Z# `! D# e  O7 t+ D. X/ x4 t* L2 c" G
>>whos S- ?2 w* _4 D" c: m, Q
Name Size Bytes Class
, J( l  u$ j. [1 }! O; L6 i6 NS    3x4  24    char array
, w7 K" c: i6 Y2 E3 V
9 _0 A  Y+ \" Y) H/ b例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :
2 @+ p) `+ Q8 ^" V; C2 u: p" G! l/ `>>c = cellstr(S)
1 B+ l# P  n, R& E- z$ t7 a% Vc =" |+ B+ R2 C) R
'abc'" T5 |1 w& U6 `
'defg'
3 y4 @; @0 s* K0 ]'hi'
/ R" N$ W5 w, d  o6 d3 O/ i; @
>>whos c
* H4 Q- ~* r# ~) b/ b" A: |Name Size Bytes Class
) G( X$ W5 G0 S* F/ Qc    3x1  294   cell array* x# i3 f, Q+ B/ l/ ]

9 f) r- V% \  t, T例3:再使用char函数将cell字符串转换为字符数组
7 M/ r8 v, B0 l>>char(c)( b. w! v! I, p, K- Y  J
ans =
" i' L5 H4 s# g- j8 z" H$ Vabc9 S' A6 Q8 k& ~
defg
) k9 V" y2 W- ^6 X+ vhi( x- Y$ h9 M; F

4 G+ u9 b$ O' m, E>> whos ans" G& {0 t3 r7 V; ]6 H/ g
Name Size Bytes Class Attributes
4 \. a4 y* I7 B- f9 fans  3x4  24    cha

/ B2 ?% C$ ]: z' V/ m* l5 ^- r

作者: NingW    时间: 2020-4-22 13:14
Matlab中的cell和char




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