Spec-Zone.ru › Octave 7

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

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

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

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

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

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

: ischar (x) ¶

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

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

: 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) ¶
: string_fill_char (new_val, "local") ¶

Запрос или установка внутренней переменной, используемой для выравнивания всех строк матрицы символов по одинаковой длине.

Значение должно быть одиночным символом, по умолчанию — " " (один пробел). Например:

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

При вызове из функции с опцией "local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.

Другой полезной функцией для управления выравниванием текста в этом случае является функция strjust.

: strjust (s) ¶
: strjust (s, pos) ¶

Возвращает текст s, выровненный по pos, который может быть "left", "center", или "right".

Если pos опущен, по умолчанию используется "right".

Символы NULL заменяются пробелами. Все другие символы обрабатываются как не пробелы.

Пример:

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

См. также: deblank, strrep, strtrim, untabify.

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

© 1996–2022 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/v7.2.0/Character-Arrays.html

Spec-Zone.ru

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