5.2字符数组

Octave使用的字符串表示是一个字符数组,因此在内部是字符串"dddddddddd"实际上是长度为10的行向量,在所有位置都包含值100(100是的ASCII代码"d"). 这有助于特征矩阵的明显推广。使用字符矩阵,可以在一个变量中表示相同长度字符串的集合。Octave中使用的约定是,字符矩阵中的每一行都是一个单独的字符串,但让每一列表示一个字符串也是可能的。

创建字符矩阵的最简单方法是将多个字符串放在一个矩阵中。

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

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

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

 
: tf = ischar (x)

如果返回truex是一个字符数组。

详见: isfloat, isinteger, islogical, isnumeric, isstring, iscellstr, isa.

广告
 
: tf = isstring (s)

如果返回trues是一个字符串数组。

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

编程注意:Octave还没有实现字符串数组,所以这个函数总是返回false。

详见: ischar, iscellstr, isfloat, isinteger, islogical, isnumeric, isa.

广告

要测试对象是否是字符串(即字符的1xN行向量,而不是字符矩阵),可以使用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)

返回文本,s,根据pos,这可能"left", "center""right".

如果pos被省略,默认为"right".

空字符将替换为空格。所有其他字符数据都被创建为非空白。

用例

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

详见: deblank, strrep, strtrim, untabify.

广告

这显示了字符矩阵的一个问题。根本不可能呈现不同长度的字符串。解决方案是使用字符串的元胞数组,如中所述Cell Arrays of Strings.


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

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