MATLAB第五章 字符串处理

上传人:876****10 文档编号:132662423 上传时间:2020-05-18 格式:PPT 页数:125 大小:475.50KB
返回 下载 相关 举报
MATLAB第五章 字符串处理_第1页
第1页 / 共125页
MATLAB第五章 字符串处理_第2页
第2页 / 共125页
MATLAB第五章 字符串处理_第3页
第3页 / 共125页
MATLAB第五章 字符串处理_第4页
第4页 / 共125页
MATLAB第五章 字符串处理_第5页
第5页 / 共125页
点击查看更多>>
资源描述

《MATLAB第五章 字符串处理》由会员分享,可在线阅读,更多相关《MATLAB第五章 字符串处理(125页珍藏版)》请在金锄头文库上搜索。

1、第七章字符串处理 7 1字符阵列7 2字符串单元阵列7 3字符串比较7 4字符串搜索与取代7 5字符串与数值之间的变换7 6综合设计示例7 7字符串函数 7 1字符阵列 在MATLAB中 字符是以其ASCII码表示的 这样可直接在屏幕上显示字符或者在打印机上打印字符 输入字符数据时应用单引号括起来 例如输入 name 中南民族大学计科院自动化专业 这时采用class命令可以检查其类型 class name ans char 这说明变量name的类型为字符型 再输入size name ans 114这说明name占用1 14向量 从这可以看出每个汉字只占用一个字符位置 众所周知 一个汉字需要用两

2、个字节的内码表示 每个字符应该占用两个字节 这一点可由下列命令得到证实 name1 MATLAB whosNameSizeBytesClassans1x48chararrayname1x1428chararrayname11x612chararrayGrandtotalis24elementsusing48bytes 变量name含有14个汉字 占用了28个字节 然而 name1包含有6个英文字母 占用12个字节 这说明每个字符都采用16位的ASCII码存储 7 1 1字符与ASCII码之间的变换在MATLAB中 每个字符按16位的ASCII码存储 这大大方便了在MATLAB中使用双字节内码字

3、符集 如汉字系统 利用double和char函数可在字符与其ASCII码之间进行转换 例如 在得到上述name和name1后输入 a1 double name1 a1 776584766566 a double name a Columns1through8 5298345234465675525149094483164632353671Columns9through14465675525147524460285367154458 aname1 char a1 aname1 MATLAB aname char a aname 中南民族大学计科院自动化专业 7 1 2建立二维字符阵列在建立二维阵

4、列时 应注意确保每行上的字符数相等 如果长度不等 应在其后补空格 例如输入 str1 MATLAB SIMULINK str1 MATLABSIMULINK 必要时可利用blanks函数补上空格 例如输入 book1 MATLABProgrammingLanguage book2 SignalProcessingusingMATLAB book3 ControlSystemusingMATLAB book4 NeuralNetworkusingMATLAB disp length book1 length book2 length book3 length book4 27302727 BOO

5、K book1blanks 3 book2 book3blanks 3 book4blanks 3 BOOK MATLABProgrammingLanguageSignalProcessingusingMATLABControlSystemusingMATLABNeuralNetworkusingMATLAB 当从字符阵列中提取字符串时 可利用deblank函数删除字符串末尾多余的空格 str2 BOOK 1 length str2 ans 30 str3 deblank str2 length str3 ans 27这说明在str3中已删除了末尾的空格 7 2字符串单元阵列 建立字符串单元阵

6、列存储字符串 比字符阵列更方便 更灵活 MATLAB专门为处理字符串单元阵列提供了函数 如cellstr findstr等 利用cellstr函数可方便地将字符阵列变换成字符串单元阵列 例如 在上面已得到BOOK字符阵列后 输入 BOOKcell cellstr BOOK BOOKcell MATLABProgrammingLanguage SignalProcessingusingMATLAB ControlSystemusingMATLAB NeuralNetworkusingMATLAB 建立了字符单元阵列BOOKcell 这时每个元素均为字符串 而且已删除了末尾的空格 这可通过leng

7、th函数求取其长度来证实 length BOOKcell 1 ans 27 相反 利用char函数可将字符单元阵列变换成字符阵列 而且能够自动在阵列元素中加上适当的空格 以便使每行的长度相等 BOOK1 char BOOKcell BOOK1 MATLABProgrammingLanguageSignalProcessingusingMATLABControlSystemusingMATLABNeuralNetworkusingMATLAB 7 3字符串比较 比较字符串可有以下几种方式 比较两个字符串或其部分是否相同 比较两个字符串中的个别字符是否相同 可对字符串中的每个元素进行归类 如根据是

8、字母还是非字母进行归类 MATLAB为这些任务提供了一些专用的函数 如strcmp strcmpi strncmp strncmpi和findstr等 它们既适用于字符阵列 也适用于字符单元阵列 7 3 1比较字符串是否相同strcmp函数用于比较两字符串是否相同 strcmpi函数则在比较时忽略其大 小写 即ABC等同于abc strncmp函数用来比较两字符串的前n个字符是否相同 同样strncmpi比较时忽略大 小写 例如 在MATLAB中输入 str1 hello str2 help str3 Hello k1 strcmp str1 str2 k1 0 k2 strcmp str1

9、str3 k2 0 k3 strcmpi str1 str3 k3 1 k4 strncmp str1 str2 3 k4 1 7 3 2比较字符是否相同当要比较两个字符串中个别字符是否相同时 可采用MATLAB的关系操作符 例如 str1 hello str2 help k str1 str2k 11100 实际上 还可以采用其它的关系操作符 这样就可以比较两个字符串的大小关系 当然实际确定其大小关系时采用的是其ASCII码 例如 A abcd B aabe k1 A Bk1 0110 k2 A Bk2 1110 k3 A Bk3 0001 7 3 3英文字母的检测在实际应用中 经常需要检测

10、字符串是否有英文字母 或者检测是否全部由字母构成 MATLAB专门为此提供了函数isletter 有时也需要检测字符串是否有空格 可采用isspace函数 例如 myaddr XiDian134 letter isletter myaddr letter 1111110000 space isspace myaddr space 0000001000 联合isletter和isspace这两个函数 可检测字符串是否全部由字母和空格构成 例如 str1 Iwishthisbookcanbebeneficialtoyou let1 isletter str1 let2 isspace str1 l

11、et3 let1 let2 ifall let3 disp 所有字符均为英文字母或空格 elsedisp 字符中包含非英文字母和空格 end 执行后得所有字符均为英文字母或空格如果输入改为str1 MypostaddressisXiDianBox134 则执行后得字符中包含非英文字母和空格 7 4字符串搜索与取代 MATLAB为字符串的搜索与取代提供了几个函数findstr strmatch strrep strtok等 这几个函数的灵活运用 可完成比较复杂的任务 例如 str Example12madeon08 18 05 k findstr str 08 k 20 str1 strrep

12、str 18 19 str1 Example12madeon08 19 05 这里将str中的日期修改为2005年08月19日 利用strtok函数可找出字符串的首部 第一个分隔符之前的字符串 str2 strtok str1 str2 Example 利用strtok函数还可以完成从英文句子中提取单词 为此编写函数来实现 functionallwords words sentence r sentenceallwords while any r w r strtok r allwords strvcat allwords w end 这时输入 str1 Iwishthisbookcanbeb

13、eneficaltoyou str1words words str1 str1words Iwishthisbookcanbebeneficialtoyou 7 5字符串与数值之间的变换 MATLAB提供了一组函数可用来在各种数制之间进行变换 例如 x 53176251 y int2str x y 53176251 whosNameSizeBytesClassx1x18doublearrayy1x816chararrayGrandtotalis9elementsusing24bytes 从这可以看出 x只占用一个存储单元 8个字节 而当它变换成字符时占用了8个字符单元 每个单元占用2个字节 在

14、将数值表示成字符串时还可以指定位数 如 p num2str pi 8 p 3 1415927 d1 bin2dec 10101 d1 21 b1 dec2bin d1 8 b1 00010101 d2 hex2dec A1B d2 2587 h2 dec2hex d2 4 h2 0A1B d3 base2dec 12210 3 d3 156 t3 dec2base d3 3 t3 12210 其中 最后一组完成在三进制数与十进制数之间进行转换 只有利用num2str函数才能将含小数的数值变换成字符串 从而可以在图形标题或标记中使用与数据相关的数值 例如 假设已利用plot x y 绘制出图形

15、则可给x轴加上这样的标记 str1 num2str min x str2 num2str max x str Vaueofxisfrom str1 to str2 xlabel str 利用mat2str函数可将矩阵变换成字符串形式 例如 A round 100 rand 3 3 50 100A 0 4500 0 0100 0 0400 0 27000 3900 0 48000 11000 26000 3200 B mat2str A B 0 45 0 01 0 04 0 270 39 0 48 0 110 260 32 7 6综合设计示例 为说明字符串的应用 设计MATLAB程序对保存在文件

16、中的文本进行处理 要求 1 统计文件中字符串 error 出现的次数 2 将文件中的字符串 error 修改成 Error 3 统计文件中字符 a b t 出现的次数及频度 4 统计文件中单词 the and 出现的次数 这里假设要处理的文件为bugs txt 其内容为LaTeXErrorReports12January1999ERRORREPORTSBeforeyoureportanerrorpleasecheckthat YourLaTeXsystemisnotmorethanoneyearold NewLaTeXreleasesoccurat6monthlyintervals thusyourproblemmayhavealreadybeenfixed Theerrorisnotalreadyfixedbyapatchaddedrecentlytothecurrentdistribution IfyouhaveaccesstoaCTANarchivethenyoucaneasilycheckwhetherthereisalreadyapatchthatfixesyourprobl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号