Spec-Zone.ru › Octave 8

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

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

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

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

Это создаёт матрицу символов размером 2x9.

Функция 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–2023 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/v8.1.0/Character-Arrays.html

Spec-Zone.ru

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