找回密码
 注册
关于网站域名变更的通知
查看: 401|回复: 1
打印 上一主题 下一主题

Matlab里的cell和char&字符串与字符数组

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-20 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
2 T# m8 s( A3 c" v( {6 ]
用importdata和textscan读取内容为字符串的txt,结果为cell型元胞组。; ?% @0 _2 H8 f4 N

9 D, E- f- s) r' B我想把cell变成char型,然后就自然地想到cell2str,遗憾的是matlab中没有这个函数。
9 V, H( q8 J; i$ Y1 U7 B
4 E9 H1 K3 W7 U就像没有str2cell一样。" w) ~: M/ m! q& }, y" B" Q0 _* b

) k8 R8 h1 _& ]! e实现str2cell功能的函数是cellstr,将字符数组转换为cell型字符串数组0 i: ?& @! W( j( L0 i. @1 e3 Z6 o
" r. x+ b) L3 H  |. n; ]( _" ~
函数语法为c = cellstr(S)
- l0 H& s2 b% z/ [! {7 i" }1 ?6 X1 s$ y; G- g. @
它的作用是:将字符数组S中的每行分割成为cell细胞元组C的一个元素。并删除S的每行尾部空格
; k% T4 c9 D, W) j9 `3 l: r- E3 \$ q% L# D4 `
正好与char相反,char是将cell字符串数组转化为字符数组s=char(c)
) _, A# C/ K! O' Q$ ~& |4 J
8 a8 i4 t) K/ v: B& H ) m3 U8 m3 J( T4 d
# I0 G& }: G' x% i

) G/ T, ?9 W# v7 ^* G- d/ b6 ^( A$ B- o% o6 |  \* D8 X
很多人分不开字符数组和字符串什么区别。9 u: g- s, X# Y
>>str1='i love matlab' % 这是一个字符数组,也是一个字符串- y0 k( K$ l, {2 v
str1 =
7 a- {  ?$ P3 a  V, Ni love matlab
$ D/ W9 U  E% [3 Z$ q$ J; T1 c8 X5 T2 d
>>str2=['I ';'am ';'a ';'boy'];% 这是字符数组,由于是数组,所以每一行必须具有相同的列数(字符数相同),不够补空格
1 }- _8 |+ i2 \5 o. ?str2 =1 F/ d3 X7 a! N+ d- d* I4 f- O9 i
I
# l' C& H! F/ O4 [3 d- I9 q  Vam
4 H2 `/ J+ W- K! m' S8 c0 A" va  c* u  R- K# H5 w/ c
boy
8 A. J% t- q' N9 Y0 f  g9 O, ^+ H$ _1 m4 E- }1 x
由于字符数组必须满足每一行具有相同的字符数,所以输入时很麻烦。通常情况我们使用char函数来完成自动补充空格或者创建字符串cell细胞元组。
) _9 r8 x4 ^  h$ `- K; b5 m1 f. j>>char('i','love','matlab') % char函数会自动补充空格
+ O, Y3 ~1 {# c* wans =
4 T5 p5 T" a; k. k  C5 Ki3 f5 e: M% V  @5 H, L
love
$ ^; q& O* L* J+ ?matlab( ~# D" G7 a2 K2 E* R5 c: z
2 o8 p: u5 S' z0 q
>>{'i','love','matlab'} % 在cell字符串中,每个单元都可以完全不同的内容,所以,不需要补充空格。
+ k" X0 j' X% ]5 N( M' Vans =+ C, N- F" L4 F: K1 E2 _' U
'i' 'love' 'matlab'
+ t% k1 Q* h2 N+ y9 f, J
6 Y% k# D$ r2 f6 K. L  W0 O. r " v9 q1 e0 o) p7 c

- B" `" b+ p- v$ H. W" i' V1 l& Z5 ^! v/ R$ R5 M
下面来看几个例子:5 q# d1 o; \9 Q' V
( Q5 D7 S2 u! f
例1:创建一个字符串数组,记住补空格. w$ r& g% \# U2 o8 n  U% \
>>S= ['abc '; 'defg'; 'hi  '] (下划线代表空格)8 G2 K) {+ N0 k4 I
S =
) C8 h) I( \6 V5 Habc# v0 \% j# x+ D: a
defg
. l+ Z# ^) r) ihi/ F4 }' S- t  k- r+ c

4 Z# T/ z9 Q7 Q- r# O& a' m4 |% A! w>>whos S; x5 Q/ P. k% R( J- L
Name Size Bytes Class
0 `4 o5 S( D7 d% ]S    3x4  24    char array( t+ T0 D% x/ |4 ^5 W' j
8 Y# P1 T' o4 l& S. t
例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :  L9 o  [' C5 |
>>c = cellstr(S)+ {7 X$ F8 l# g8 Y4 ?+ u
c =
# \  P' ~1 R" p: q' ?6 A; Q'abc'' P; @* }- j1 L6 W  B: l( @5 ]
'defg'2 r( m& p( @/ B" k
'hi'" C/ o, a2 q9 Y$ N1 p
' C$ g; e* I- ]8 _- I1 ?* p
>>whos c+ M8 W& u; U1 ?; q
Name Size Bytes Class. g* I. t& B( J1 h
c    3x1  294   cell array$ G0 }, q& ^" j0 |$ x
  q- }6 G/ W5 a/ S
例3:再使用char函数将cell字符串转换为字符数组
  e- X  {0 f) D5 N>>char(c)
) M* C2 r; Q: ^( s5 c- O: _* d$ W4 ians =0 F5 i: q5 A- E
abc
" D- c; f  k& w5 K& W) e7 Adefg
; L* k2 f; E8 J- yhi$ Z5 @7 g1 c# _) ^1 c) ~
. P/ ]/ H6 r( y9 p: j
>> whos ans
, a0 H/ y8 s+ B1 H; o% h+ [Name Size Bytes Class Attributes
3 S0 ]* o/ {: Z% s1 z# J* j3 cans  3x4  24    char
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-3-20 18:09 | 只看该作者
    Matlab里的cell和char&字符串与字符数组
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-2 20:19 , Processed in 0.187500 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表