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".Символы NULL заменяются пробелами. Все остальные символы обрабатываются как не-пробельные.
Пример:
strjust (["a"; "ab"; "abc"; "abcd"]) ⇒ " a" " ab" " abc" "abcd"
Это демонстрирует проблему с матрицами символов. Невозможно представить строки разной длины. Решение — использовать ячеистый массив строк, который описан в Ячеистые массивы строк.
© 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/v9.2.0/Character-Arrays.html