1 / 36

第 4 章字符串数组、元胞数组和结构数组

第 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

Download Presentation

第 4 章字符串数组、元胞数组和结构数组

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章字符串数组、元胞数组和结构数组 • 4.1 字符串数组 • 4.2 元胞数组(单元数组) • 4.3 结构数组(构架数组)

  2. 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

  3. >> 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?

  4. >>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!

  5. >> 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

  6. 4.1.2 数字与字符串的相互转换

  7. >>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.

  8. 4.1.3 字符串函数

  9. >>a=eval(' sqrt(2) ') a = 1.4142 >> eval(' a=sqrt(2) ') a = 1.4142 >>a=feval(' sqrt ' ,2) a = 1.4142

  10. >>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

  11. >> 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

  12. >>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

  13. 4.2 单元数组

  14. 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

  15. >> 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')

  16. >> 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'

  17. 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]

  18. >> 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]

  19. 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

  20. >> 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

  21. >> 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

  22. 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'

  23. >> circle(2).radius='sqrt(2)'; >> circle circle = 1x2 struct array with fields: radius center linestyle color >> circle.radius ans = 2.5000 ans = sqrt(2)

  24. >> 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)

  25. >> 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

  26. >> 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

  27. 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.

  28. 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

  29. >> col=circle.color ??? Illegal right hand side in assignment. Too many elements. >>[c1,c2,c3]=deal(circle.color) c1 = red c2 = green c3 = blue

  30. 4.3.4 结构函数 >>circle = 1x3 struct array with fields: radius center linestyle color filled >> fieldnames(circle) ans = 'radius' 'center' 'linestyle' 'color' 'filled'

  31. >> class(square) ans = struct >> isstruct(circle) ans = 1 >> d=pi; >> isstruct(d) ans = 0 >> isfield(circle,'color') ans = 1 >> isfield(circle,'width') ans = 0

  32. >> 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

  33. >> 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

  34. 要点 • 字符串数组的创建 • 字符串转换和操作函数 • 单元数组的创建和内容获取 • 结构数组的创建和内容获取

More Related