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 .