Основные
функции символьных данных
В основе представления
символов в строках лежит их кодирование с помощью сменных
таблиц кодов.
Такие
таблицы ставят в однозначное соответствие каждому символу некоторый код со значением
от 0 до 255.
Вектор, содержащий
строку символов, в системе MATLAB задается следующим образом:
-
S= 'Any
Characters' — вектор, компонентами которого являются числовые коды, соответствующие
символам [
Символ внутри такой строки дублируется (заменяется на
''). — Примеч. ред.
].
Первые 127
чисел — это коды ASCII, представляющие буквы латинского языка, цифры и спецзнаки.
Они образуют основную таблицу кодов. Вторая таблица (коды от 128 до 255) является
дополнительной и может использоваться для представления символов других языков,
например русского. Длина вектора S соответствует числу символов в строке, включая
пробелы. Апостроф внутри строки символов должен вводиться как два апострофа
' '.
К основным
строковым функциям
относятся следующие:
-
char (X)
— преобразует массив X положительных целых чисел (числовых кодов от 0 до
65 535) в массив символов системы MATLAB (причем только первые 127 кодов
— английский набор ASCII, со 128 до 255 — расширенный набор ASCII) и возвращает
его, на платформе Windows при значении выше 65 535 выдает предупреждение
об ошибке, но возвращает русскую букву я (я повторяется так же, как char(255+256rt),
где п — целые неотрицательные числа) [
Результат char(x) при х>65535
зависит от платформы, русификации и т. д. — Примеч. ред.
];
Пример:
»
X=reshape(32:127,32,3);
» S= char(X')
S=
!"#$*&'()*+.-./0123456789::<=>?
(aABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
"abcdefghijklmnopqrstuvwxyz{|}-[]
»
t1=
'
computer'
»
t2='for';
»
t3='home':
»
t4='users':
»
S = Char(tl.t2.t3.t4)
S
=
computer
for
home
users
-
char (С)
— преобразует каждый элемент строкового массива ячеек в ряды массива символов,
если строки массива ячеек разного размера, к ним в конце добавляются пробелы
(осуществляется набивка (padding) в терминах MATLAB) так чтобы в каждом
ряде массива символов было одинаковое число символов;
-
char (Tl,
T2, ТЗ), где Т — строки, возвращает массив символов, при этом копии строк
T1, T2, Т3 преобразуются в ряды массива символов добавлением при необходимости
пробелов в конце рядов массивов символов, как описано ранее;char (java.Tang.string)
— преобразует объект класса java.lang. string вмассив символов MATLAB;
-
char (javaarray
of java.lang.string) — единственный случай, когда выходным аргументом функции
является не массив символов, а строковый массив ячеек, в который преобразуется
массив строк Java;
-
double(S)
— преобразует символы строки S в числовые коды 0—65535 и возвращает вектор
с этими числовыми кодами;
-
ischar'(S)
— возвращает логическую единицу, если S является символьной переменной,
и логический ноль в противном случае;
-
deblank(str)
— возвращает строку, полученную из аргумента — строки str с удаленными из
ее конца пробелами;
-
deblank(c)
— применяет функцию deblank к каждому элементу строкового массива ячеек
с.
Примеры:
»
S = 'computer'
S
=
computer
»
X = double(S)
X
=
99
111 109 112 117 116 101 114
»
ischar(S)
ans
=
1
»c{l,l}='My
';
»
c{l,2}='home ';
»
c{1.3}='computer ';
»
с
с=
'My
' 'home ' 'computer
» с = deblank(c)
с =
'My'
'home' 'computer'
Примечание
Правильная работа строковых
функций с дополнительной кодовой таблицей ASCII возможна, но не гарантируется
для систем, не прошедших адаптацию под тот или иной язык. В частности, проблемы
работы с символами кириллицы (например перевод строки при наборе малой буквы
«с» в командной строке) уже обсуждались. Поэтому примеры в этой
главе даны для строк с символами основной кодовой таблицы.
Содержание раздела