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 T
9 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# `- q
i 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 \$ e
str2 =
" @- q! E% @; ?/ C* ^
I
7 Y* I8 N, z7 X( N
am
6 z% ] w. ]' _$ n* C
a
" [- p' s; @6 K' W, X; V
boy
$ 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 ~% l
ans =
3 x6 n* ?; w+ X0 v
i
; j! M% s) u$ i2 R/ K6 g
love
( ?% r) J. h) C I
matlab
" Y# ?/ D A# ~/ k
8 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 f
abc
; N0 u2 V' m- h, S
defg
0 Q' R9 C8 H7 a& H& g Z! M
hi
5 V' h) O* K6 @* Q
/ g7 T. P1 Y5 B% c
>>whos S
# b3 Y# I3 B5 Q% S4 s
Name 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 @+ g
Name Size Bytes Class
9 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; l
abc
4 |. o1 q7 R2 O
defg
# e- a& z% }& z9 I6 O7 C
hi
8 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. E
ans 3x4 24 char
作者:
yin123
时间:
2020-3-20 18:09
Matlab里的cell和char&字符串与字符数组
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2