为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

1.4 字符串、元胞和结构

2012-07-29 41页 ppt 479KB 30阅读

用户头像

is_150184

暂无简介

举报
1.4 字符串、元胞和结构null1.4 字符串、元胞和结构1.4 字符串、元胞和结构注意第2章练习答案,并完成第3章练习 有问题可以email:xmyang@shou.edu.cn 辅导地点:海洋学院415室, 时间:周2下午13点以后 作业和答案:到matlab2010@yeah.net1.字符串数组1.字符串数组(Character String Array) 创建:单引号对 一个实例: B=‘s’ class(B) size(B) whos %观察变量在内存中所占字节null串数组的属性和标识 创建 大小 元素标识 串数组的ASCII码, d...
1.4 字符串、元胞和结构
null1.4 字符串、元胞和结构1.4 字符串、元胞和结构注意第2章练习答案,并完成第3章练习 有问题可以email:xmyang@shou.edu.cn 辅导地点:海洋学院415室, 时间:周2下午13点以后 作业和答案:到matlab2010@yeah.net1.字符串数组1.字符串数组(Character String Array) 创建:单引号对 一个实例: B=‘s’ class(B) size(B) whos %观察变量在内存中所占字节null串数组的属性和标识 创建 大小 元素标识 串数组的ASCII码, double和char 中文串 创建带单引号的字符串,连续两个单引号 长串构成null复杂串数组的创建 直接创建:一个问题 函数创建 char str2mat strvcat 转换函数产生数码字符串 最常用的数组/字符串转换函数int2str , num2str , mat2str int2str把整数数组转化成串数组(自动取整) num2str把非整数数组转化成串数组 Mat2str把数值数组转成输入形态的数组(eval) null综合例题:在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('maximum',t_text,y_text); tit=['y=exp(-,num2str(a),'t)*sin(',num2str(w),'t)']; plot(t,zeros(size(t)),'k') hold on plot(t,y,'b') 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'),ylabel('y'),hold offnull利用元胞数组创建复杂字符串 元胞数组在存放和操作字符串上的应用。 a='MATLAB 6.x '; b='includes new data types:'; c1='◆Multidimensional array'; c2='◆User-definable data structure'; c3='◆Cell arrays'; c4='◆Character array'; c5='◆Function handle'; c=char(c1,c2,c3,c4,c5); C={a;b;c}; disp([C{1:2}]) disp(' ') disp(C{3})null串转换函数 fprintf, sprintf, sscanf 的用法示例。 rand('state',0);a=rand(2,2); s1=num2str(a) s_s=sprintf('%.10e\n',a) fprintf('%.5g\\',a) s_sscan=sscanf(s_s,'%f',[3,2]) 串操作函数串操作函数blanks(n),deblank(s) 字符串运算字符串运算判断字符串是否相等 比较两个串或串中的部分字符是否相等 比较两个串中的个别字符是否相等 先将串分成几部分,判断每个部分是否为空白字符 strcmp,strncmp区别 Word1=‘studentend’ Word2=‘stustdent’;null通过字符的运算比较字符 ==,~=,<,>, <=,>= 字符串中字符的分类 isspace(s);isletter(s) 查找与替换 findstr(s1,s2) strfind(text,pattern) strrep(s1,s2,s3)总结总结普通 char (1)把数字转化为相应的字符值 (2)把二维数组转化相应的字符串 double 把字符转化为相应的double 值 blanks 创建一个由空格组成的字符串 deblanks 去除字符串末端的空格 字符检测 字符检测 ischar 如果是一个字符数组,那么将会返回1 isletter 如果是字母表中的字母,那么将会返回1 isspace 如果是空白字符,那么将会返回1 字符串操作字符串操作strcat 连接字符串 strvcat 竖直地连接字符串 strcmp 如果两字符串相等,那么函数将会返回1 stricmp 忽略大小写如果两字符串相等,那么函数将会返回1 strncmp 如果两字符串的前n 个字母相等,那么函数将会返回1 strncmpi 忽略大小,如果两字符串的前n 个字母相同,那么数将会返回1字符串操作(续)字符串操作(续)findstr 在一个字符串中寻找另一个字符串 strfind 在一个字符串中寻找另一个字符串 strjust 对齐字符串 strmatch 找字符串的区配 strrep 用一个字符串去替代另一个字符串 strtok 查找一字符串 upper 把字符串的所有字符转化为大写 lower 把字符串的所有字符转化为小写 数字转化为字符串 数字转化为字符串 int2str 把整数转化为相应的字符串形式 num2str 把数字转化为相应的字符串形式 mat2str 把矩阵转化为相应的字符串形式 sprintf 对一字符串进行化输出 字符串转化为数字 字符串转化为数字 str2double 把字符串转化相应的double 型数据 str2num 把字符转化成数字 sscanf 从字符串中读取格式化数据 数制转换 数制转换 hex2num 把IEEE 十六进制字符型型数据转化为double 形数据 hex2dec 把十六制字符串转化为相应的十进制整数 dec2hex 把十进制数转化为相应的十六制字符串 bin2dec 把二进制字符串转化为相应的十进制整数 base2dec 把base B 转化为相应的十进制数据 dec2base 把十进制转化为相应的base B hex2num 把IEEE 十六进制字符型型数据转化为double 形数据2、元胞数组(cell array)2、元胞数组(cell array)基本组分是元胞(cell) 元胞可以存放任何类型、大小数组,元胞都是平等。 根据下标(单下标、全下标)null元胞数组的创建和显示 元胞标识寻访和内容编址寻访的不同 元胞数组的创建和显示 本例演示: (2 × 2) 元胞数组的创建。 C_str=char('这是','元胞数组创建算例 1'); R=reshape(1:9,3,3); Cn=[1+2i]; S_sym=sym('sin(-3*t)*exp(-t)'); null(1)直接创建法之一 A(1,1)={C_str}; A(1,2)={R}; A(2,1)={Cn}; A(2,2)={S_sym}; (2)直接创建法之二 B{1,1}=C_str; B{1,2}=R; B{2,1}=Cn; B{2,2}=S_sym; celldisp(B)null元胞数组的扩充、收缩和重组 元胞数组的扩充。 C=cell(2); C(:,1)={char('Another','text string');10:-1:1} AC=[A C] A_C=[A;C] cellplot 能用图形形象化地表示元胞数组的内容。(A_C 取自上例) cellplot(A_C,'legend')null元胞数组的收缩和重组 A_C(3,:)=[] R_A_C=reshape(A_C,2,3) 元胞数组内容的调取 %圆括号得到的是元胞 f1=R_A_C(1,3) class(f1) %花括号取得内容 f2=R_A_C{1,3} class(f2)null% 调取元胞内的子数组 f3=R_A_C{1,1}(:,[1 2 5 6]) % 同时调取多个元胞内容 [f4,f5,f6]=deal(R_A_C{[1,3,4]}) % deal 可把输入变量逐个分配给输出变量使用 元胞数组转换函数元胞数组转换函数常用元胞数组转换函示例 num2cell 把数值数组转换成元胞数组 rand('state',0); A=rand(2,3,2) C1=num2cell(A) %把数组转换成维数大小相同元胞 C2=num2cell(A,1) %按行方向装入数组元胞 C3=num2cell(A,[2,3]) %列页方向转入null(2)mat2cell把矩阵分解成元胞数组 clear,x=zeros(4,5); x(:)=1:20 C4=mat2cell(x, [2 2], [3 2]) %把X转移到(2*2)的元胞数组 %“行维”方向分2块,第1块2行,第2块2行 %“列维”方向分2块,第1块3列,第2块2列 celldisp(C4) null(3)cell2mat把元胞转换成矩阵 D=cell2mat(C4(1,:)) 3、结构数组Structure array3、结构数组Structure array结构数组的创建和显示 直接创建法及显示 本例通过温室数据(包括温室名、容积、温度、湿度等)演示:单构架的创建和显示。 (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 61.9 59.2 57.5]; 显示“单结构”结构和内容显示“单结构”结构和内容green_house(2,3).name=‘六号房’; green_house green_house.parameter green_house.parameter.temperature null【例3.3.1.1-2】本例演示结构数组的创建和显示,并利用结构数组保存一个温室群的数据。 本例的运行以例3.3.1.1-1 为先导。 (1)直接对域赋值法 green_house(2,3).name='六号房'; (2)显示结构和元素内容 green_house %可显示结构:行列数,域 green_house(2,3) null利用结构函数创建结构数组 【例3.3.1.2-1】利用结构函数struct,建立温室群的数据库。 a=cell(2,3); green_house_1=struct('name',a,'volume',a,'parameter',a(1,2)) green_house_2=struct('name',a,'volume',[],'parameter',[]) green_hopuse_3(2,3)=struct('name',[],'volume',[],'parameter',[])nulla1={'六号房'};a2={'3200 立方米'}; green_house_4(2,3)=struct('name',a1,'volume',a2,'parameter',[]); T6=[31.2,30.4,31.6,28.7;29.7,31.1,30.9,29.6]; green_house_4(2,3).parameter.temperature=T6; green_house_4 %struct函数中的输入变量必须是元胞,维数相同 %任何情况下,空数组可以用来创建新的空域。 %struct指令不能直接创建带子域的构建数组。子域需要另行创建。结构数组域中内容的调取和设置结构数组域中内容的调取和设置FN=fieldnames(S_n) %获得构架域名 FC=getfield(S_n,{S_index},f_name,{f_index}) %获得具体构架内容 S_n=setfield(S_n ,{S_index},f_name,{f_index},value) %设置具体构架域中内容null【说明】 Fieldnames函数输出一维元胞数组FN,它的每个元胞被S_n的每个域名赋值。 Getfield函数输出的FC是具体框架中的内容 Setfiled函数输出的仍是构架数组自身,只是它的某些域被重置了。 S_n 框架数组名 {S_index} 指定元素框架的下标 f_name 指定的域名,必须是字符串 {f_index} 域中数组的下标null结构数组操作深入 结构数组的扩充和收缩 【例3.3.3.1-1】本例演示结构数组SSTF 的扩充和收缩。(以例3.3.2-1 的运行为基础。) (1)原结构的结构 size(SSTF) (2)把1/(s+1)放在第2行第2列构架中 SSTF(2,2)=struct(tf(1,[1 1])) size(SSTF) (3)删除构架数组的第1行,取出第2构架的内容,显示成习惯表达式 SSTF(1,:)=[] S22n=SSTF(1,2).num,S22d=SSTF(1,2).den printsys(S22n{1},S22d{1})null增添域和删除域 【例3.3.3.2-1】对构架数组green_house 进行域的增添和删减操作。 (1)创建构架数组 clear, for k=1:10; department(k).number=['No.',int2str(k)]; end department (2)增添域 department(1).teacher=40; department(1).student=300; department(1).PC_computer=40; department null(3)增添子域的操作只影响那个具体构架,而不影响整个构架数组 department(2).teacher.male=35; department(2).teacher.female=13; D2T=department(2).teacher %第2 构架teacher 域包含两个子域 D1T=department(1).teacher %第1 构架teacher 域仅是一个数 (4)删除子域的操作只影响那个具体构架 department(2).teacher=rmfield(department(2).teacher,'male'); department(2).teacher null(5)删除域的操作是对整个框架数组实施的 department=rmfield(department,'student') %删除一个域 department=rmfield(department,{'teacher';'PC_computer'}) %删除两个域 数值运算操作和函数对结构数组的应用数值运算操作和函数对结构数组的应用【例3.3.3.3-1】数值运算操作和函数在构架域上的作用。 n_ex=5; for k=1:n_ex ex(k).f=(k-1)*n_ex+[1:5]; end ex %显示构架数组的域中内容 disp([blanks(10) '构架域中内容']) for k=1:n_ex disp(ex(k).f) end class(ex(1).f) %检查域中内容的类型null%对构建数组相应位置的数据相加求和 sum_f=zeros(1,5); for k=1:n_ex sum_f=sum_f+ex(k).f; end sum_f %对构架数组域中各元素求平方根 disp([blanks(20) 'ex.f 的平方根值']) for k=1:n_ex, disp(sqrt(ex(k).f)), end 构架数组和元胞数组之间的转换构架数组和元胞数组之间的转换【例3.3.4-1】指令struct2cell 和cell2struct 的使用。 (1)创建带两个域的(1*5)构架数组 for k=1:5 ex(k).s=['No.' int2str(k)]; ex(k).f=(k-1)*5+[1:5]; end (2)显示构架数组内容 fprintf('%s\n','ex.s 域的内容 '); fprintf('%s\',blanks(4)) for k=1:5 fprintf('%s\\',[ex(k).s blanks(1)]) end fprintf('%s\n',blanks(1)) fprintf('%s\n','ex.f 域的内容 ') for k=1:5; disp(ex(k).f); end null(3)把ex构架数组转换为元胞数组 C_ex=struct2cell(ex); size(C_ex) fprintf('%s\',[C_ex{1,1,1},blanks(3)]) fprintf('%5g\',C_ex{2,1,1}) (4)把元胞数组转换为构架数组之一 FS={'S_char';'F_num'}; EX1=cell2struct(C_ex,FS,1) (5)把元胞数组转换为构架数组之二 EX2=cell2struct(C_ex,'xx',2) (6)把元胞数组转换为构架数组之三 YY=strvcat('y1','y2','y3','y4','y5'); EX3=cell2struct(C_ex,YY,3)
/
本文档为【1.4 字符串、元胞和结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索