6.3.4 字符串的元胞数组

元胞数组的一个常见用途是将多个字符串存储在同一个变量中。虽然也可以通过让每一行作为一个字符串的方式,将多个字符串存储在字符矩阵中,但这会引入一个问题:所有字符串必须具有相同的长度。因此,建议使用元胞数组来存储多个字符串。对于某些需要字符矩阵表示的操作,有几个函数可以在字符串的元胞数组与字符数组之间进行转换。charstrvcat 将元胞数组转换为字符数组(参见 连接字符串),而 cellstr 函数则将字符数组转换为字符串的元胞数组:

a = ["hello"; "world"];
c = cellstr (a)
     ⇒   c =
         {
           [1,1] = hello
           [2,1] = world
         }
 
cstr = cellstr (strmat)

根据字符串数组 strmat 的元素创建一个新的元胞数组对象。

strmat 的每一行成为 cstr 的一个元素。转换前,行尾的所有空格将被删除。

要从元胞字符串转换回字符数组,请使用 char

另请参阅: cellchar

使用元胞数组存储多个字符串的另一个优点是,Octave 附带的大多数字符串操作函数都支持这种表示形式。例如,可以使用 strcmp 函数将一个字符串与多个其他字符串进行比较。如果该函数的一个参数是字符串,另一个参数是字符串的元胞数组,则元胞数组中的每个元素都会与该字符串参数进行比较:

c = {"hello", "world"};
strcmp ("hello", c)
     ⇒   ans =
        1   0

以下字符串函数支持字符串的元胞数组:charstrvcatstrcat(参见 连接字符串)、strcmpstrncmpstrcmpistrncmpi(参见 在字符串中搜索)、str2doubledeblankstrtrimstrtruncstrfindstrmatchregexpregexpi(参见 字符串操作)以及 str2double(参见 转换字符串)。

函数 iscellstr 可用于测试一个对象是否为字符串的元胞数组。

 
tf = iscellstr (cell)

如果元胞数组 cell 的每个元素都是字符串,则返回 true。

另请参阅: ischarisstring