1、1第三章 字符串数组和结构数组3.1 字符串数组3.1.1 字符串入门【例 3.1-1】数值量与字符串的区别。cleara=12345.6789class(a) %对变量 a 的类别进行判断a_s=size(a) a =1.2346e+004ans =doublea_s =1 1 b=S class(b) %对变量 a 的类别进行判断b_s=size(b) b =Sans =charb_s =1 1 whos Name Size Bytes Classa 1x1 8 double arraya_s 1x2 16 double arrayans 1x4 8 char arrayb 1x1 2 c
2、har arrayb_s 1x2 16 double arrayGrand total is 10 elements using 50 bytes 3.1.2 串数组的属性和标识【例 3.1-2】串的基本属性、标识和简单操作。(1)创建串数组a=This is an example. a =This is an example. 2(2 )串数组的大小size(a) ans =1 19 (3 )串数组的元素标识a14=a(1:4)ra=a(end:-1:1) a14 =Thisra =.elpmaxe na si sihT (4)串数组的 ASCII 码用指令 abs, double 把串数组
3、转化成 ASCII 码,char()则把 ASCII 码转换成串说组ascii_a=double(a) ascii_a =Columns 1 through 12 84 104 105 115 32 105 115 32 97 110 32 101Columns 13 through 19 120 97 109 112 108 101 46 ascii_a2=abs(a) ascii_a2 =84 104 105 115 32 105 115 32 97 110 32 101 120 97 109 112 108 101 46 ascii_a3=char(a) ascii_a3 =This i
4、s an example. char(ascii_a) ans =This is an example. 3(5)对字符串 ASCII 码的操作w=find(a=a %找出串数组 a 中小写字母的位置ascii_a(w)=ascii_a(w)-32;%大小写字母 ASCII 码值差 32,用数值加法改变部分码值char(ascii_a) %把新的 ASCII 码翻译成字符 ans =THIS IS AN EXAMPLE. (6)中文字符串数组 A=这是一个算例。;A_s=size(A)A56=A(5 6)ASCII_A=double(A) A_s =1 7A56 =算例ASCII_A =Col
5、umns 1 through 6 54754 51911 53947 47350 52195 49405Column 7 41379 char(ASCII_A) ans =这是一个算例。 (7)创建带单引号的字符串b=Example 3.1.2-1 b =Example 3.1.2-1 ab=a(1:7), ,b, . ab =This is Example 3.1.2-1 . 43.1.3 复杂串数组的创建一 多行串数组的直接创建【例 3.1-3】多行串数组的直接输入示例。clearS=This string array has multiple rows. S =This string a
6、rray has multiple rows. size(S) ans =2 18 二 利用串操作函数创建多行串数组【例 3.1-4】用专门函数 char , str2mat , strvcat 创建多行串数组示例。S1=char(This string array,has two rows.) S1 =This string arrayhas two rows. S2=str2mat(这,字符,串数组,由 4 行组成) S2 =这 字符 串数组 由 4 行组成 S3=strvcat(这,字符,串数组, ,由 4 行组成) S3 =这 字符 串数组 由 4 行组成 size(S3) ans =
7、5 5 三 转换函数产生数码字符串5【例 3.1-5】最常用的数组/字符串转换函数 int2str , num2str , mat2str 示例。A=eye(2,4); %生成一个(2*4)数值数组A_str1=int2str(A) % 转换成串数组A_str1 =1 0 0 00 1 0 0 B=rand(2,4); %生成数值矩阵B3=num2str(B,3) % 保持 3 位有效数字B3 =0.95 0.607 0.891 0.4560.231 0.486 0.762 0.0185 B_str=mat2str(B,4) % 保持 4 位有效数字,转化为数组输入形式B_str =0.950
8、1 0.6068 0.8913 0.4565;0.2311 0.486 0.7621 0.0185 【例 3.1-6】综合例题:在 MATLAB 计算生成的图形上标出图名和最大值点坐标。clear %清除内存得所有变量a=2;w=3;t=0:0.01:10; %取自变量采样数y=exp(-a*t).*sin(w*t); % 计算函数值,产生函数数组y_max,i_max=max(y); % 找出最大元素位置t_text=t=,num2str(t(i_max); %生成最大值点的横坐标字符串y_text=y=,num2str(y_max); %生成最大值点的坐标字符串max_text=char(
9、maximum,t_text,y_text); %生成最大值点的横坐标字符串tit=y=exp(-,num2str(a),t)*sin(,num2str(w),t);%生成表示图名得字符串plot(t,zeros(size(t),k) %画纵坐标为 0 的基准线hold on %保持绘制的线不被清6除plot(t,y,b) %用兰色画y( t)曲线plot(t(i_max),y_max,r.,MarkerSize,20) % 用大红点标最大值text(t(i_max)+0.3,y_max+0.05,max_text) %在图上书写最大值点的数据值title(tit),xlabel(t),yla
10、bel(y),hold off %书写图名、横坐标和纵坐标0 t图 3.1-1 字符串运用示意图3.2 结构数组3.2.1 结构数组的直接创建法及显示【例 3.2-1】本例通过温室数据(包括温室名、容积、温度、湿度等)演示:单结构的创建和显示。green_house.name=一号房;green_house.volume=2000 立方米;green_house.parameter.temperature=31.2 30.4 31.6 28.7 29.7 31.1 30.9 29.6;green_house.parameter.humidity=62.1 59.5 57.7 61.5 62.0
11、 61.9 59.2 57.5; green_house %显示结构体的内容green_house = 7name: 一号房volume: 2000 立方米parameter: 1x1 struct green_house.parameter ans = temperature: 2x4 doublehumidity: 2x4 double green_house.parameter.temperature ans =31.2000 30.4000 31.6000 28.700029.7000 31.1000 30.9000 29.6000 【例 3.2-2】建立学生档案结构体,包含下列信息:
12、 编号(用 number 表示,在结构体下 number 又称为结构体的成员变量或结构体的域),数值型 姓名(name),字符型 身高(height): 数值型 考试成绩(test):矩阵,其第 i 行为第 i 次考试成绩,而第 j 列为第 j 门考试成绩。student_rec.number=1student_rec.name=张三student_rec.height=180student_rec.test=100 80 75; 77 60 9267 28 90; 100 89 78 student_rec = number: 1student_rec = number: 1name: 张三
13、student_rec = number: 1name: 张三height: 180student_rec = number: 1name: 张三height: 180test: 4x3 double 下面的指令建立一组 100 个学生(假设 2 个年级,每个年级 50 人)的新的结构体变量 BB(50,2)=struct(student_rec) %构造 502 结构体 B = 50x2 struct array with fields:8numbernameheighttest B = 50x2 struct array with fields:numbernameheighttest如果
14、想给 B 变量加一个成员变量体重(weight ),则可以将结构体中任一个变量后面加 weight 成员变量即可,如:B(1,10).weight=90 %添加成员变量 weightB = 50x10 struct array with fields:numbernameheighttestweight如果想消除结构体变量中的任何一个成员变量,则可用指令rmfield()函数来完成。如:B= rmfield(B,weight) %删除成员变量 weightB = 50x10 struct array with fields:numbernameheighttest3.3 单元(cell)结构M
15、ATLAB 从 5。0 版起引入了一种新的数据结构单元(cell)结构,该结构把不同属性的数据都纳入到一个变量之下,这个变量就称为单元。9例 3.3-1】建立学生档案单元 B,包含下列信息: 编号 姓名 身高 考试成绩。B=1, zhangsan, 180,100 80 75; 77 60 92; 67 28 90; 100 89 78B = 1 zhangsan 180 4x3 doublesize(B)B4 %显示第 4 单元内容可以用指令 celldisp()函数来直接显示整个单元,如:celldisp(B) % 显示整个单元变量B1 =1B2 =zhangsanB3 =180B4 =100 80 7577 60 9267 28 90100 89 78