Spec-Zone.ru › Octave 6

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", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.

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

© 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/v6.4.0/Character-Arrays.html

Spec-Zone.ru

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