matlab讲义第五章.ppt_第1页
matlab讲义第五章.ppt_第2页
matlab讲义第五章.ppt_第3页
matlab讲义第五章.ppt_第4页
matlab讲义第五章.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 字符串,5.1 字符串概念 5.2 字符串操作 5.3 字符串转换,5.1 字符串概念,在MATLAB中,数个字符(Characters)可以构成一个字符串(Strings),一个字串是被视为一个行向量(Row Vector)进行储存,而这一字符串中的每一字符(含空格符),是以其ASCII码的形式存放于此行向量中的每一个元素,只是其外显形式仍是可读的字符。如: phrase=Matlab Program. 建立字符串变量phrase phrase= Matlab Program.,多个字符中变量可直接并排,以得到一个新宁符串变量。例如: str=I like MATLAB; 建立字符串

2、变量strl str2= and Perl!; 建立字符串变量str2 str3=strl str2 直接行并排串变量strl和str2,以建立一个新字符串变量str3 str3= I like MATLAB and Perl!,提示:MATLAB用“单引号”(Single Quote)来界定字符串变量,而C语言则是用“双引号” 来界定字符串变量,这是两者不同之处。,要输入含有单引号的字符串, 可重复单引号的使用,例如: phrase=I v got a date!, 重复的使用 phrase= I ve got a date! 如果要计算字符串变量phrase的长度(即组成字符的个数),可用

3、length命令: length(phrase) 计算字符串变量phrase的长度 ans= 16 若要查看字符串变量phrase的储存内容(即ASCII码),可使用double或abs命令,例如: phraseascii=double(phrase) 查看phrase的ASCII码 phraseascii= Columns l through 12 73 39 118 101 32 103 11l 116 32 97 32 100 Columns 13 through 16 97 116 101 33,若要将字符串变量phraseascii储存的ASCII码转换成字符串形式,可用char命令

4、,例如: phrase2=char(phraseascii) 将ASCII码转回宁符串形式 phrase2= Ive got a date! 由于MATLAB在储存宁符串时,每一个字符会占用两个字节(2bytes)。 可使用whos命令来查看字符串变所占用的储存空间: whos phrase 查看工作空间内变量phrase占用内存大小 Name Size Bytes Class phrase lxl6 32 char array Grand total ls 16 elements using 32 bytes,由于MATLAB是以两个字节来储存一个字符,所以可以支持中文。例如: Chines

5、e=吉林大学,地学部 Chinese= 吉林大学,地学部 中文的ASCII码都会大于数字128,可验证如下: abs(Chinese) ans = Columns 1 through 7 21513 26519 22823 23398 44 22320 23398 Column 8 37096,由于MATLAB将字符串以其相对应的ASCII码(即数字形式)储存成一行向量,所以若对此字符串直接进行数值运算,其结果就变成一般数值向量的运算,而不再是字符串的运算,例如: x= Chinese + 1 x= Columns l through 6 42166 42218 43207 41282 421

6、66 42218 Column 7 45735 字符串变量所占用的空间是同长度数值变量的四分之一,所以如果数据包含很多字符串,尽量以字符串变量来储存数据。,可用两种方法来储存多个字符串于一个变量之中。第一种方法是使用二维字符数组,但必须先确认每个字符串(即每一行)的长度一样,否则就必须在短字符串结尾补上空格符,以确保每一字符串均有相同的长度。例如: departments=ee ;cs ;econ注意“”、“;”和空格符号的使用 departments= ee cs econ departments1= ee; cs;econ departments1= ee cs econ,请注意上述二个字

7、符串均各由4个字符(含空格符)构成,故其长度均为4,共占用内存大小为24个字节(即3个字符串*4个字符*2 bytes=24 bytes)。 departments2=ee,cs,econ 注意“”、“,”符号的使用 departments2 = eecsecon 第二种存储存多个宇符串于个变量的方法,是使用char命令,例如: departments3=char(ee,cs,econ) 注意“()”及“,”的使用 departments3= ee cs econ,在从二维字符数组抽取出字符串时,切记要使用deblank命令来删除尾部的空格符,例如: deptl=departments(1,:

8、) %(1,:)代表第一行的元素 dept1= ee dept2=deblank(departments(1,:) %使用deblank命令来移除 dept2= %尾部的空格 ee length(dept1) %显示变量deptl的长度 ans= 4 length(dept2) %显示变量dept2的长度 ans= 2,如果字符串的长度差异较大,那么使用二维字符数组来储存多个字符串,将造成内存空间的浪费。可使用“异质数组”。如:celldata=ee,cs,eoon 以异质数组来储存多个字符串,注意“,”及“,”符号的使用 celldata= ee cs econ 可以使用cellstr命令将

9、字符数组转换成异质数组: celldata=cellstr(departments) celldata= ee cs econ,在上例中,cellstr命令将字符数组departments转换成异质数组celldata储存,而原先补在字符数组departments结尾的空格符已被删除,可用length命令验证如下: length(celldata2) 显示异质数组celldata第2个元素长度 若要将包含字符串的异质数组转换成一般的二维字符数组,可用char命令,例如: strdepts=char(celldata) 异质数组celldata转换成字符数组,结尾补空。 strdepts= ee

10、 cs econ,5.2 字符串操作,函数disp允许不显示它的变量名而显示一个字符串。例如: v=I cant find the manual! v = I cant find the manual! disp(v) I cant find the manual!,函数input能输入一个字符串: x=input( Enter anything , s ) Enter anything anything can be entered x = anything can be entered 这里,在函数input里的附加参量s告诉MATLAB,作为一个字符串,只要把用户输入传送到输出变量,就不

11、需要引号。,如果要直接“执行”某一特定字符串,可以使用eval命令,其效果就如同直接在MATLAB命令窗口内输入此一特定字符串,例如: str=x=1 2 3;y=x.2; eval(str) y= 1 4 9 此结果和从MATLAB命令窗口内直接输入的执行的结果一致,例如: x=1 2 3;y=x.2 y= 1 4 9,可以用class命令或ischar命令来判断某一个变量是否为字符串,例如: class(Chinese) 返回值char,代表变量Chinese是字符串变量 ans= char ischar(x) 返回值0,代表变量x不是一个字符串变量 ans= 0,strcmp命令用于比较

12、字符串内容的异同,例如: strl=today; str2=tomorrow; str3=today; strcmp(strl,str2) 比较两字符串strl和str2 ans= 0 strcmp(strl,str3) % 比较两字符串strl和str3 ans= 1 提示:strcmp命令执行结果返回值为0,表示str和str2内容不相等,返回值为1,表示str1和tr3内容相等。在C语言中,strcmp命令也用于字符串比较,但在两字符串相等时,返回值是0,这和MATLAB的strcmp命令刚好相反。,stmcmp命令用于比较字符串的前n个字符,例如: strncmp(strl,str2,

13、2) 比较strl及str2两字符串的前n个字符 ans= 1 strcmp及strncmp命令也可用于字符串异质数组,例如: A=北京,上海,广州; 建立字符串异质数组A B=北京,宁波,深圳; 建立字符串异质数组B strcmp(A,B) 比较字符串异质数组A与B是否相同 ans= 1 0 0 strncmp(A,B,1) 比较字符串异质数组A与B的第一个字符是否相同 ans= 1 0 0,findstr命令可以寻找在某一个长字符串中的子字符串(Substrings),并返回其起始位置,例如: string=我最喜欢的运动是网球; pattern=网球; position=findstr(

14、string,pattern) position= 9,strrep命令用于字符串寻找及代换,例如: pattern2=蓝球; newstring=strrep(string,pattern,pattern2) newstring= 我最喜欢的运动是蓝球,strtok命令可根据一给定的分界字符,将一字符串拆解成数个字符串,默认的分界字符为空格符,例如: Input_string=ee cs econ stat me; remainder=Input_string; parsed= 建立空字符数组 while (any(remainder) chopped,remainder=strtok(re

15、mainder); parsed=strvcat(parsed,chopped); end parsed parsed= ee cs eeon stat me 提示:在上例中,strvcat命令的作用是将拆解下来的字符串内容(即储存在字符串变量chopped中)加到二维字符数组parsed中。,5.3 字符串转换,int2str命令可将整数类型的数据转换成字符串数据,例如: x=13862; y=int2str(x) 整数类型的数据转换成字符串数据 在上例中,原先变量x储存一个整数13862,int2str命令将其转换成一个字符串13462,其长度为5个字符。,要将实数转为字符串,可用num2

16、str命令,例如: str=num2str(pi) 实数转为字符串 str= 3.1416 若要增加有效位数,可加入另一参数,例如: str=num2str(pi,lO) str= 3.141592654,int2str及num2str常用于标示坐标点的值,例如:若要在y=sin(x)的图形上,标出当x=2.5的坐标值(如图所示),可输入如下: x=0:0.1:2*pi; y=sin(x); plot(x,y) str=leftarrow(,num2str(2.5),num2str(sin(2.5),); text(2.5,sin(2.5),str);,dec2hex命令可将十进制数值数据转换

17、成十六进制的字符串表示法,例如: x=1026; y=dec2hex(x) y= 402 请注意在上例中,变量x储存数据类型为数值,而变量y储存数据类型为字符串。类似的命令还有hex2num、hex2dec、dec2hex、bin2dec、dec2bin、base2dec等,请用help命令查阅各自使用语法的详细说明。,mat2str命令可将矩阵转换为字符串,此字符串经过eval命令,可再变回原先的矩阵,例如: A= 1 2 1;3 5 6; B=mat2str(A); A1=eval(B); B B= 1 2 l;3 5 6 A1 Al= l 2 l 3 5 6 A= Al ans= l l

18、 1 1 l 1 在上例中,mat2str命令已将为2*3的数值矩阵A转换变成二维字符串数组B,然后再对此二维字符串数组B使用eval命令,产生一个与转换前的矩阵A相同内容的矩阵A1。,sprintf命令可结合数值或字符串,以产生新字符串,例如: str=圆周率; newstr=sprintf(%s是%g,str,pi) newstr= 圆周率是3.14159 其中s代表印出字符串,g代表印出数值,也可使用f或加上控制印出位数大小的数字等,以精确地控制产生的字符串格式,详情请查阅help sprintf的说明。,sscanf可按给定的格式来解析出所要的字符串或数值,例如: str=2 4.7 5.2; mat=sscanf(str,f) mat= 2.0000 4.7000 5.2000,函数fprintf经常是函数disp的一个有用替换,由于它提供了对结果更多的控制。当准备把格式化的数据写到一个文件中去时,按缺省它在命令窗口显示结果。例如, fprintf(See what this doesn ) See what this does 当把格式化数据写到磁盘时,可采用系列方式: x = 0:.1:1; y = x; exp(x); fid = fopen(exp.txt, wt); fprintf(fid, %6.2f %12.8fn, y); fclose(fi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论