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/v5.2.0/Character-Arrays.html