2.3 字符串处理
MATLAB提供了大量的字符串函数,如表2.15所示。
表2.15 字符串相关函数
2.3.1 字符串构造
字符串或字符串数组的构造可以通过直接给变量赋值来实现,字符串的内容需要写在单引号内;如果字符串的内容包含单引号,则需要以两个重复的单引号来表示。
构造多行字符串时,如果字符串内容写在[]内,那么多行字符串的长度必须相同;如果字符串内容写在{}内,则字符串的长度可以不同。
例2-29,直接赋值构造字符串。
在命令行窗口输入:
Str1='How are you? ', Str2='Fine, thank you.', Str = strcat( Str1, Str2) Str_mat1 = {'July'; 'August'; 'September'; } Str_mat2 = ['July'; 'August'; 'September'; ]%将报错,如结果输出部分
输出结果如下:
Str1 =How are you? Str2 =Fine, thank you. Str =How are you? Fine, thank you. Str_mat1 = 'July' 'August' 'September Error using vertcat Dimensions of matrices being concatenated are not consistent
MATLAB还提供了strvcat函数和char函数用于纵向连接多个字符串。
strvcat函数连接多行字符串时,每行字符串的长度不要求相等,所有非最长字符串的右边会自动补偿空格,使每行字符串的长度相同。
char函数与strvcat函数类似,不过当多行字符串中有空字符串时,strvcat函数会自动进行忽略,而char函数会把空字符串也用空格补偿后,再进行连接。
例2-30,连接字符串示例。
在命令行窗口输入:
A='Top'; B='Middle'; C='Bottom'; CAT1=strvcat(A, B, C), CAT2=char(A, B, C), size=[size(CAT1); size(CAT2)]
输出结果如下:
CAT1 = Top Middle Bottom CAT2 = Top Middle Bottom size = 3 6 3 6
2.3.2 字符串比较
有时需要比较两个字符串之间的关系,可以通过关系运算符,也可以使用strcmp函数来比较两个字符串。
例2-31,比较字符串。
在命令行窗口输入:
A1 = ('Hello' == 'World') B1 = ('Hello' == 'Hello') A2 = strcmp('Hello', 'World') B2 = strcmp('Hello', 'Hello')
输出结果如下:
A1 = 0 0 0 1 0 B1 = 1 1 1 1 1 A2 = 0 B2 = 1
注意
使用关系运算符进行比较时,返回值是一个与字符串长度相同大小的数组,这时要求被比较的两个字符串的长度必须相同;而strcmp函数则是判断两个字符串是否相同,无被比较的两个字符串的长度必须相同的要求,返回值为数值0或1。
2.3.3 查找与替换
通过findstr函数可以实现字符串的查找与搜索。
通过对字符串数组中相应的元素直接赋值可以实现字符串的替换,也可以使用strrep函数来实现字符串的替换。
例2-32,查找与替换字符串示例。
在命令行窗口输入:
string =' You smile like sunshine. ' ; spacePos=findstr(string, ' ') %搜索字符串内的空格位置 ePos= findstr(string, 'e') %搜索字母e ouPos= findstr(string, 'ou') %搜索字符串ou dstring=' We smile like sunshine. ' idstring= strrep( string, ' You', 'We')
输出结果如下:
spacePos = 1 5 11 16 26 ePos = 10 15 24 ouPos = 3 dstring = We smile like sunshine. idstring =We smile like sunshine.
注意
• findstr函数对字母的大小写敏感;
• findstr函数对字符串矩阵不起作用,因此对字符串矩阵的搜索只能通过循环索引矩阵内的元素,然后再进行搜索;
• 直接赋值方法并不能使两个不同长度的字符串相互替换,而strrep函数可以替换两个任意长度的字符串。与findstr函数类似,strrep对字符串矩阵不起作用。
2.3.4 字符串类型转换
MATLAB还提供了大量字符串与各种数据类型之间的转换函数,如表2.16所示。
表2.16 字符串类型与数据类型转换函数
例2-33,将数字转换成字符串示例。
在命令行窗口输入:
r=4; a=pi*r^2; string =[' A circle of radius ' num2str(r) ' has an area of ' num2str(a) ' . ' ] ; disp(string)
输出结果如下:
A circle of radius 4 has an area of 50.2655 .