资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十章: 字符与字符串张智星jangcs.nthu.edu.twhttp:/www.cs.nthu.edu.tw/jang清大资工系 多媒体检索实验室2021/8/21本章简介n本章介绍 MATLAB 用于处理字符(Characters)与字符串(Strings)的指令及相关数据型态。MATLAB 处理字符串的相关指令大部分都放在下列目录之中:nMATLAB 根目录toolboxmatlabstrfunn其中的strfun就是代表String Functions。若要查询与字符和字符串相关的指令,可在 MATLAB 下输入:nhelp strfun 或是 help strings2021/8/2210-1 字符与字符串的基本概念n数个字符(Characters)可以构成一个字符串(Strings)n一个字符串是被视为一个列向量(Row Vector)进行储存n此一字符串中的每一字符(含空格符),是以其 ASCII 码的形式存放于此列向量中的每一个元素(Element)2021/8/23字符与字符串的基本概念nMatlab 用单引号来界定字符串变量,多个字符串变量可直接并排,以得到一个新字符串变量,例如:n范例10-2: string102.mnstr3 =I like MATLAB, JavaScript, and Perl!str1 = I like MATLAB,;% 建立字符串变量 str1str2 = JavaScript, and Perl!;% 建立字符串变量 str2str3 = str1 str2% 直接并排str1 及 str2,以建立str32021/8/24字符与字符串的基本概念n欲输入含有单引号的字符串,可重复单引号的使用n若要计算字符串变量的长度(即组成字符的个数),可用 length 指令n范例10-4: string104.m ans = 16sentence = Ive got a date!;length(sentence)% 计算字符串变量 sentence 的长度2021/8/25字符串和其ASCII codendouble 指令: 检视字符串变量的储存内容(即 ASCII 内码)nchar 指令: 将 ASCII 内码转回字符串形式n范例10-6: string106.mphraseascii =Columns 1 through 1273 39 118 101 32 103 111 116 32 97 32 100Columns 13 through 1697 116 101 33sentence2 =Ive got a date!sentence = Ive got a date!;sentenceAscii = double(sentence); %检视 sentence 的 ASCII 码sentence2 = char(sentenceAscii) % 将 ASCII 码转回字符串形式2021/8/26字符的储存n无论是中文或英文,每一个字符都会占用两个字节(2 Bytes),故在上页中,字符串变量 sentence 总共由 16 个字符构成,占用的内存总计为三十二个字节(32 bytes)nwhos 指令: 检视字符串变量 sentence 所占用储存空间(whos 变量)nMATLAB 是以两个字节来储存一个字符,所以也可以支持 Big5 的中文码,而且 Big5 中文的 ASCII 内码都会大于数字 128n由于 MATLAB 将字符串以其相对应之 ASCII 内码(即数字形式)储存成一列向量,故若对此字符串直接进行数值运算,MATLAB 会先将此字符串转成数值,再进行一般数值向量的运算2021/8/27字符与字符串的基本概念-evalneval 指令: 直接“执行”某一特定字符串,其效果就如同直接在 MATLAB 指令窗口内输入此一特定字符串neval 指令特别适用于在 for - loop 内自动产生有规律的变量名称范例10-11: string111.mName Size Bytes Class x3 3x3 72 double array x4 4x4 128 double array x5 5x5 200 double array x6 6x6 288 double arrayGrand total is 86 elements using 688 bytesnx3 , x4 , x5 , x6 都是在 for - loop 中产生的变量,分别代表维度为 33、44、55、66 的魔方阵clear all % 清除所有变量for i = 3:6eval(x, int2str(i) , = magic( , int2str(i) , ) ; );endwhos x*2021/8/28字符串的判断nclass 或 ischar 指令: 判断某一个变量是否为字符串n范例10-12: string112.mn字符串变量所占用的空间是同长度双精准(Double)数值变数的四分之一 chinese = 今日事,今日毕;out1 = class(chinese)% out1 的值是 “char”,代表chinese 是字符串变量x = chinese+1;out2 = ischar(x) % out2 的值是 0,代表 x 不是一个字符串变量2021/8/2910-2 一个变量来储存多个字符串n第一种方法是使用二维字符数组(Two Dimensional Character Arrays)n必须先确认每个字符串(即每一横列)的长度一样,否则就必须在短字符串结尾补上空格符范例10-13: string201.mdepartments =eecsecondepartments = ee ; cs ; econ% 注意空格符的使用2021/8/210一个变量来储存多个字符串n用char 指令储存多个字符串 得到结果和前一个范例依样;n从二维字符数组抽取出字符串时,切记要使用 deblank 指令来移除尾部的空格符范例10-15: string203.m.departments = char(ee, cs, econ)% 注意()及,的使用departments = char(ee, cs, econ);dept1 = departments(1,:);% (1,:)代表第一列的元素dept2 = deblank(dept1);% 使用 deblank 指令来移除尾部的空格符len1 = length(dept1)% 显示变量 dept1 的长度=4len2 = length(dept2)% 显示变量 dept2 的长度=22021/8/211一个变量来储存多个字符串n当字符串的长度差异甚大,那么使用二维字符数组来储存多个字符串,将造成内存空间的浪费,怎么办?n异质数组: 使用大括号框住多个字符串, 或用cellstr指令将字符数组转换成异质数组 (string204.m,string205.m)n若要将包含字符串的异质数组转换成一般的二维字符数组,还是可以使用 char 指令2021/8/21210-3 字符串的比较、寻找、代换、分解与结合nstrcmp 指令: 用于比较字符串内容的异同范例10-19: string301.mn不相等回传0,相等回传1nDIFFERENT to Cstr1 = today;str2 = tomorrow;str3 = today;out1 = strcmp(str1, str2)% 比较两字符串 str1 和 str2 = 0out2 = strcmp(str1, str3)% 比较两字符串 str1 和 str3 = 12021/8/213字符串的比较和寻找nstrncmp 指令: 用于比较字符串的前 n 个字符nstrcmp 及 strncmp 指令亦可用于字符串异质数组nfindstr 指令: 寻找在某一个长字符串中的子字符串(Substrings),并传回其起始位置nstrrep 指令: 用于字符串寻找及代换,例如:newString = strrep(string, pattern, pattern2)2021/8/214字符串的分解nstrtok 指令: 根据一给定的分界字符(Delimiting Characters),将一字符串拆解成数个字符串,预设分界字符为空格符nstrvcat 指令: 将拆解下来的字符串内容(即储存在字符串变量 chopped 中) 加到二维字符数组 parsed 中n范例10-24: string306.m parsed =eecseconstatmeinput_string = ee cs econ stat me;remainder = input_string;parsed = ;% 建立一空字符数组while (any(remainder)chopped, remainder = strtok(remainder);parsed = strvcat(parsed, chopped);endparsed2021/8/215字符串的结合nMATLAB 在读入中文字符串时,将每一个中文字的 2-byte 分开来读,造成两个中文字变成四个字符串元素nxlate 指令: 将中文的 2-byte 结合在一起n范例10-27: string309.mline2 =我是Rogerans = 7fid = fopen(tbig5.txt);line = fgetl(fid);% 读取一列档案内容fclose(fid);line2 = xlate(line)% 使用 xlate 将被猜开的中文结合在一起leng = length(line2)% 显示字符串长度2021/8/21610-4 字符串、数值与数组的转换nint2str 指令: 将整数型态的数据转换成字符串数据 例如:y = int2str(x), x为整数, y 为字符串nnum2str 指令: 将实数转为字符串ndec2hex 指令: 将 10 进位数值数据转换成 16 进位的字符串表示法n更多类似指令如 : hex2num, hex2dec, bin2dec.2021/8/217字符串数组的转换nmat2str 指令可将矩阵转换为字符串,此字符串若再经由 eval 指令的使用,可再变回原先的矩阵n范例10-32: string405.mB =1 2 1;3 5 6ans = 1A = 1 2 1; 3 5 6 ;B = mat2str(A)% 将矩阵 A 转成字符串 BA2 = eval(B)% 再将字符串 B 转回矩阵 A2isequal(A, A2)% 测试 A 和 A2 是否相等2021/8/218字符串与数值的结合nsprintf 指令: 结合数值或字符串,以产生新字符串 (%s-印出字符串,%g-印出数值,可使用 %f 或加上控制印出位数大小的数字 )n范例10-33: string406.m newString =圆周率是 3.14159nsscanf 可依给定的格式来解析出所要的字符串或数值n范例10-34: string407.m mat = 2.0000 4.7000 5.2000str = 圆周率;newString = sprintf(%s是 %g, str, pi)str = 2 4.7 5.2;mat = sscanf(str, %f)2021/8/219部分资料从网络收集整理而来,供大家参考,感谢您的关注!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号