5.2 字符数组

Octave 使用的字符串表示形式是字符数组,因此字符串 "dddddddddd" 在内部实际上是一个长度为 10 的行向量,其所有位置都包含值 100(100 是 "d" 的 ASCII 码)。这自然可以推广到字符矩阵。使用字符矩阵,可以在一个变量中表示一组等长字符串。Octave 中的约定是字符矩阵的每一行是一个独立的字符串,但让每一列表示一个字符串也同样可行。

创建字符矩阵最简单的方法是将多个字符串组合成一个矩阵。

collection = [ "String #1"; "String #2" ];

这将创建一个 2×9 的字符矩阵。

函数 ischar 可用于测试对象是否为字符矩阵。

 
tf = ischar (x)

如果 x 是字符数组,则返回 true。

另请参阅: isfloatisintegerislogicalisnumericisstringiscellstrisa

 
tf = isstring (s)

如果 s 是字符串数组,则返回 true。

字符串数组是一种数据类型,它在数组的每个元素中存储字符串(字符的行向量)。它与字符数组不同,字符数组是 N 维数组,其中每个元素是单个 1×1 字符。它与字符串的元胞数组也不同,元胞数组在每个元素中存储字符串,但使用元胞索引 ‘{}’ 来访问元素,而字符串数组使用普通数组索引 ‘()’。

编程说明:Octave 尚未实现字符串数组,因此此函数将始终返回 false。

另请参阅: ischariscellstrisfloatisintegerislogicalisnumericisa

要测试对象是否为字符串(即 1×N 的行向量字符,而非字符矩阵),可以将 ischar 函数与 isrow 函数结合使用,如下例所示:

ischar (collection)
     ⇒  1

ischar (collection) && isrow (collection)
     ⇒  0

ischar ("my string") && isrow ("my string")
     ⇒  1

一个相关的问题是:当从不同长度的字符串创建字符矩阵时会发生什么?答案是 Octave 会在比最长字符串短的字符串末尾添加空白字符。可以使用 string_fill_char 函数来使用不同于空白的字符。

 
val = string_fill_char ()
old_val = string_fill_char (new_val)
old_val = string_fill_char (new_val, "local")

查询或设置用于将字符矩阵的所有行填充为相同长度的内部变量。

该值必须是一个字符,默认值为 " "(一个空格)。例如:

string_fill_char ("X");
[ "these"; "are"; "strings" ]
    ⇒   "theseXX"
        "areXXXX"
        "strings"

当从函数内部使用 "local" 选项调用时,该变量将在该函数及其调用的任何子程序中进行本地更改。退出函数时恢复原始变量值。

在这种情况下,另一个用于控制文本对齐的有用函数是 strjust 函数。

 
str = strjust (s)
str = strjust (s, pos)

根据 pos 返回对齐后的文本 spos 可以是 "left""center""right"

如果省略 pos,则默认为 "right"

空字符会被替换为空格。所有其他字符数据都被视为非空白。

示例:

strjust (["a"; "ab"; "abc"; "abcd"])
     ⇒ 
        "   a"
        "  ab"
        " abc"
        "abcd"

另请参阅: deblankstrrepstrtrimuntabify

这显示了字符矩阵的一个问题:它根本无法表示不同长度的字符串。解决方案是使用字符串的元胞数组,这在 字符串的元胞数组 中有描述。


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4