2.5.3 二维字符数组

二维字符数组其实就是由字符串纵向排列构成的数组。借用构造数值数组的方法,可以用直接输入法生成或连接函数法获得。下面用两个实例加以说明。

【例2.56】S1、S2、S3、S4分别视为数组的4行,用直接输入法沿纵向构造二维字符数组。

        >> S1=’路修远以多艰兮,';
        >> S2=’腾众车使径侍。';
        >> S3=’路不周以左转兮,';
        >> S4=’指西海以为期 ! ';
        >> S=[S1; S2, ' '; S3; S4, ' ']        %此法要求每行字符数相同,不够时要补齐空格
        S =
        路修远以多艰兮,
        腾众车使径侍。
        路不周以左转兮,
        指西海以为期!
        >> S=[S1; S2, ' '; S3; S4]            %每行字符数不同时,系统提示出错
        ?? ? Error using ==> vertcat
        All rows in the bracketed expression must have the same
        number of columns.

可以将字符串连接生成二维数组的函数有多个,在下例2.54中将主要介绍char( )、strvcat( )和str2mat( )这3个函数。

【例2.57】 用char( )、strvcat( )和str2mat( )函数生成二维字符数组的示例。

        >> S1a='I''m nobody, '; S1b=' who are you? ';   %注意串中有单引号时的处理方法
        >> S2='Are you nobody too? ';
        >> S3='Then there''s a pair of us.';          %注意串中有单引号时的处理方法
        >> SS1=char([S1a, S1b], S2, S3)
        SS1 =
        I'm nobody, who are you?
        Are you nobody too?
        Then there's a pair of us.
        >> SS2=strvcat(strcat(S1a, S1b), S2, S3)
        SS2 =
        I'm nobody, who are you?
        Are you nobody too?
        Then there's a pair of us.
        >> SS3=str2mat(strcat(S1a, S1b), S2, S3)
        SS3 =
        I'm nobody, who are you?
        Are you nobody too?
        Then there's a pair of us.

例2.57中,strcat( )和strvcat( )两函数的区别在于,前者是将字符串沿横向连接成更长的字符串,而后者是将字符串沿纵向连接成二维字符数组。