360 likes | 505 Views
第 4 章字符串数组、元胞数组和结构数组. 4.1 字符串数组 4.2 元胞数组(单元数组) 4.3 结构数组(构架数组). 4.1 字符串数组. 4.1.1 字符串构造. >> t='How about this character string?' t = How about this character string? >> size(t) ans = 1 32 >> whos Name Size Bytes Class
E N D
第4章字符串数组、元胞数组和结构数组 • 4.1 字符串数组 • 4.2 元胞数组(单元数组) • 4.3 结构数组(构架数组)
4.1 字符串数组 • 4.1.1 字符串构造 >> t='How about this character string?' t = How about this character string? >> size(t) ans = 1 32 >> whos Name Size Bytes Class t 1x32 64 char array Grand total is 34 elements using 80 bytes
>> u=abs(t) u = Columns 1 through 12 72 111 119 32 97 98 111 117 116 32 116 104 Columns 13 through 24 105 115 32 99 104 97 114 97 99 116 101 114 Columns 25 through 32 32 115 116 114 105 110 103 63 >> char(u) ans = How about this character string?
>>w=[u v] w = Hello,World! >>disp(w) Hello,World! >>u=t(16:24) u = character >>u=‘ Hello,' ; >>v=‘ World! ' ; >>v=[' Character strings having more than ' ' one row must have the same number ' ' of column just like matrices! '] v = Character strings having more than one row must have the same number of column just like matrices!
>> lengends=char(‘Wilt’,‘Russel’,‘Kareem) lengends = Wilt Russel Kareem >> char('one','','tow','three') ans = one tow three >> strvcat('one','','two','three') ans = one two three
>>rad=2.5; area=pi*rad^2; >>t=[' A circle of radius ' num2str(rad) … ' has an area of ’ num2str(area) ' . ' ] ; >>disp(t) A circle of radius 2.5 has an area of 19.63 >>t=sprintf(' A circle of radius %.4g has an area of %.4g.’… ,rad, area); >>disp(t) A circle of radius 2.5 has an area of 19.63. >>fprintf(' A circle of radius %.4g has an area of %.4g.\n‘ … ,rad, area) A circle of radius 2.5 has an area of 19.63.
>>a=eval(' sqrt(2) ') a = 1.4142 >> eval(' a=sqrt(2) ') a = 1.4142 >>a=feval(' sqrt ' ,2) a = 1.4142
>>b='Peter Piper picked a peck of pickled peppers ' ; >>findstr(b,' ') % find space ans = 6 12 19 21 26 29 37 >>findstr(b,' p ') % find the letter p ans = 9 13 22 30 38 40 41 >>find (b= = ' p ') % for single character searches ans = 9 13 22 30 38 40 41 >>findstr(b, ' cow ') % find the word cow ans = [ ] >> findstr(b,' pick ') % find the string pick ans = 13 30
>> strrep(b, ' p ', ' P ') % capitalize all p ' s ans = Peter PiPer Picked a Peck of Pickled PePPers >>strrep(b, ' Peter ', ' Pamela ') % change Peter to Pamela ans = Pamela Piper picked a peck of pickled peppers
>>disp(b) Peter Piper picked a peck of pickled peppers >>strtok(b) % ans = Peter >>[c, r]=strtok(b) c = Peter r = Piper picked a peck of pickled peppers >>strtok(b,'a') ans = Peter Piper picked
4.2.1 单元数组的创建 >> A(1,1)={[1 2 3;4 5 6;7 8 9]}; >> A(1,2)={2+3i}; >> A(2,1)={'A character atring'}; >> A(2,2)={12:-2:0}; >>A A = [3x3 double] [2.0000+ 3.0000i] 'A character atring' [1x7 double] 单元索引 >> A(1,1) ans = [3x3 double] >> A{1,1}=[1 2 3;4 5 6;7 8 9]; >> A{1,2}=2+3i; >> A{2,1}='A character string'; >> A{2,2}=12:-2:0; >>A A = [3x3 double] [2.0000+ 3.0000i] 'A character string' [1x7 double] 按值寻址 >> A{1,1} ans = 1 2 3 4 5 6 7 8 9
>> celldisp(A) A{1,1} = 1 2 3 4 5 6 7 8 9 A{2,1} = A character atring A{1,2} = 2.0000 + 3.0000i A{2,2} = 12 10 8 6 4 2 0 >>cellplot(A,'legend')
>> B={[1 2],'John Smith',;2+3i,5} B = [1x2 double] 'John Smith' [2.0000+ 3.0000i] [ 5] >> C=cell(2,3) C = [] [] [] [] [] [] >> C(1,1)='This doesn''t work' ??? Conversion to cell from char is not possible. >> C(1,1)={'This does work'} C = 'This does work' [] [] [] [] [] >> C{2,3}='This works too' C = 'This does work' [] [] [] [] 'This works too'
4.2.2 单元数组处理 >> A A = [3x3 double] [2.0000+ 3.0000i] 'A character string' [1x7 double] >> B B = [1x2 double] 'John Smith' [2.0000+ 3.0000i] [ 5] >> C=[A;B] C = [3x3 double] [2.0000+ 3.0000i] 'A character string' [1x7 double] [1x2 double] 'John Smith' [ 2.0000+ 3.0000i] [ 5]
>> D=C([1 3],:) D = [3x3 double] [2.0000+ 3.0000i] [1x2 double] 'John Smith' >> C(3,:)=[] C = [3x3 double] [2.0000+ 3.0000i] 'A character string' [1x7 double] [ 2.0000+ 3.0000i] [ 5]
4.2.3 获得单元数组的内容 >> y=B(2,2) y = [5] >> y=B(4) y = [5] >> class(y) ans = cell >> class(y{1}) ans = double >> B B = [1x2 double] 'John Smith' [2.0000+ 3.0000i] [ 5] >> x=B{2,2} x = 5 >> class(x) ans = double
>> B{:,2} ans = John Smith ans = 5 >> d=B{:,2} ??? Illegal right hand side in assignment. Too many elements. >> [d,e]=deal(B{:,2}) d = John Smith e = 5
>> celldisp(A) A{1,1} = 1 2 3 4 5 6 7 8 9 A{2,1} = A character string A{1,2} = 2.0000 + 3.0000i A{2,2} = 12 10 8 6 4 2 0 >> A{1,1}(3,:) ans = 7 8 9 >> A{4}(2:5) ans = 10 8 6 4 >> A{2,1}(3:11) ans = character
4.3 结构数组 • 4.3.1 创建结构数组 >> circle(2).radius=3.4; >> circle(2).color='green'; >> circle(2).linestyle=':'; >> circle(2).center=[2.3 -1.2]; >> circle circle = 1x2 struct array with fields: radius center linestyle color >> circle.radius=2.5; >> circle.center=[0,1]; >> circle.linestyle='--'; >> circle.color='red'; >> circle circle = radius: 2.5000 center: [0 1] linestyle: '--' color: 'red'
>> circle(2).radius='sqrt(2)'; >> circle circle = 1x2 struct array with fields: radius center linestyle color >> circle.radius ans = 2.5000 ans = sqrt(2)
>> Cradius=[2.5 3.4]; >> Ccenter=[0 1;2.3 -1.2]; >> Clinestyle={'--' ':'}; >> Ccolor={'red','green'}; >> Cradius(3)=25.4; >> Ccenter(3,:)=[-1 0]; >> Clinestyle{3}='-.'; >> Ccolor{3}='blue' >> circle(3).radius=25.4; >> circle(3).center=[ -1 0]; >> circle(3).linestyle='-.'; >> circle(3).color='blue'; myfunc(circle) myfunc(Cradius,Ccenter,Clinestyle,Ccolor)
>> circle(1).filled='yes' circle = 1x3 struct array with fields: radius center linestyle color filled >> circle.filled ans = yes ans = [] ans = [] >> circle(2).filled='no'; >> circle(3).filled='yes'; >> circle.filled ans = yes ans = no ans = ye
>> values1={2.5 'sqrt(2)',25.4}; >> values2={[0 1] [2.3 -1.2] [-1 0]}; >> values3={'--',':','-.'}; >> values4={'red','green','blue'}; >> values5={'yes','no','yes'}; >> CIRCLE=struct('radius',values1,'center',values2,...) 'linestyle',values3,'color',values4,'filled',values5) CIRCLE = 1x3 struct array with fields: radius center linestyle color filled
4.3.2 结构处理 >> A=[circle CIRCLE] A = 1x6 struct array with fields: radius center linestyle color filled >> square.width=5; >> square.height=14; >> square.center=zeros(1,2); >> square.rotation=pi/4; >> B=[circle square] ??? Error using ==> horzcat CAT arguments are not consistent in structure field number.
4.3.3 获取结构内容 >>circle circle = 1x3 struct array with fields: radius center linestyle color filled >> rad2=circle(2).radius rad2 = sqrt(2) >> circle(1).radius ans = 2.5000
>> col=circle.color ??? Illegal right hand side in assignment. Too many elements. >>[c1,c2,c3]=deal(circle.color) c1 = red c2 = green c3 = blue
4.3.4 结构函数 >>circle = 1x3 struct array with fields: radius center linestyle color filled >> fieldnames(circle) ans = 'radius' 'center' 'linestyle' 'color' 'filled'
>> class(square) ans = struct >> isstruct(circle) ans = 1 >> d=pi; >> isstruct(d) ans = 0 >> isfield(circle,'color') ans = 1 >> isfield(circle,'width') ans = 0
>> fnames=fieldnames(circle) fnames = 'radius' 'center' 'linestyle' 'color >> circle2=rmfield(circle,fnames{5}) circle2 = 1x3 struct array with fields: radius center linestyle color >> circle3=rmfield(circle,'radius') circle3 = 1x3 struct array with fields: center linestyle color filled
>> rad1=getfield(circle,{1},fnames{1}) rad1 = 2.5000 >> rad3=getfield(circle,{3},fnames{1}) rad3 = 25.4000 >> circle4=setfield(circle,{3},fnames{1},8) circle4 = 1x3 struct array with fields: radius center linestyle color filled
要点 • 字符串数组的创建 • 字符串转换和操作函数 • 单元数组的创建和内容获取 • 结构数组的创建和内容获取