Spec-Zone.ru › Octave 9

5.2 Массивы символов

Строковое представление, используемое в Octave, — это массив символов, поэтому внутри программы строка "dddddddddd" фактически является вектором-строкой длины 10, содержащим во всех позициях значение 100 (100 — это код ASCII символа "d"). Это позволяет очевидным образом обобщить представление на матрицы символов. С помощью матрицы символов можно представить набор строк одинаковой длины в одной переменной. В Octave принято, что каждая строка матрицы символов является отдельной строкой текста, однако можно также считать строкой текста каждый столбец.

Самый простой способ создать матрицу символов — объединить несколько строк в матрицу.

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

В результате создаётся матрица символов размером 2 на 9.

Чтобы проверить, является ли объект матрицей символов, можно использовать функцию ischar.

: tf = ischar (x)

Возвращает true, если x является массивом символов.

См. также: isfloat, isinteger, islogical, isnumeric, isstring, iscellstr, isa.

: tf = isstring (s)

Возвращает true, если s является массивом строк.

Массив строк — это тип данных, в котором в каждом элементе массива хранятся строки (векторы-строки символов). Он отличается от массивов символов, которые представляют собой 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.

Это демонстрирует проблему матриц символов: представить строки разной длины просто невозможно. Решение — использовать ячеечный массив строк, описанный в разделе Ячеечные массивы строк.

© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Character-Arrays.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API