Основные функции символьных данных
В основе представления символов в строках лежит их кодирование с помощью сменных таблиц кодов. Такие таблицы ставят в однозначное соответствие каждому символу некоторый код со значением от 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 возможна, но не гарантируется для систем, не прошедших адаптацию под тот или иной язык. В частности, проблемы работы с символами кириллицы (например перевод строки при наборе малой буквы «с» в командной строке) уже обсуждались. Поэтому примеры в этой главе даны для строк с символами основной кодовой таблицы.