Octave 使用的字符串表示形式是字符数组,因此字符串 "dddddddddd" 在内部实际上是一个长度为 10 的行向量,其所有位置都包含值 100(100 是 "d" 的 ASCII 码)。这自然可以推广到字符矩阵。使用字符矩阵,可以在一个变量中表示一组等长字符串。Octave 中的约定是字符矩阵的每一行是一个独立的字符串,但让每一列表示一个字符串也同样可行。
创建字符矩阵最简单的方法是将多个字符串组合成一个矩阵。
collection = [ "String #1"; "String #2" ];
这将创建一个 2×9 的字符矩阵。
函数 ischar 可用于测试对象是否为字符矩阵。
tf = ischar (x) ¶如果 x 是字符数组,则返回 true。
另请参阅: isfloat、isinteger、islogical、isnumeric、isstring、iscellstr、isa。
tf = isstring (s) ¶如果 s 是字符串数组,则返回 true。
字符串数组是一种数据类型,它在数组的每个元素中存储字符串(字符的行向量)。它与字符数组不同,字符数组是 N 维数组,其中每个元素是单个 1×1 字符。它与字符串的元胞数组也不同,元胞数组在每个元素中存储字符串,但使用元胞索引 ‘{}’ 来访问元素,而字符串数组使用普通数组索引 ‘()’。
编程说明:Octave 尚未实现字符串数组,因此此函数将始终返回 false。
另请参阅: ischar、iscellstr、isfloat、isinteger、islogical、isnumeric、isa。
要测试对象是否为字符串(即 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 返回对齐后的文本 s,pos 可以是 "left"、"center" 或 "right"。
如果省略 pos,则默认为 "right"。
空字符会被替换为空格。所有其他字符数据都被视为非空白。
示例:
strjust (["a"; "ab"; "abc"; "abcd"])
⇒
" a"
" ab"
" abc"
"abcd"
这显示了字符矩阵的一个问题:它根本无法表示不同长度的字符串。解决方案是使用字符串的元胞数组,这在 字符串的元胞数组 中有描述。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4