8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 131 132 133 134 135 136 137 ... 365

Сервисные функции для работы со строками

MATLAB имеет ряд сервисных функции для облегчения работы со строками. Поиск подстроки в строке осуществляет findstr, которая возвращает массив с начальными позициями вхождений:

» str = MATLAB хранит строки в виде вектор-строк;

» substr = строк;

» pos = findstr(str, substr)

pos =

15 36

Функция findstr полагает, что подстрока с образцом для поиска содержится во входном аргументе меньшего размера, а строка, в которой производится поиск,— в аргументе большего размера, поэтому необязательно заботиться о порядке входных аргументов.

Примечание

Символы кирнлицы могут некорректно отображаться в некоторых приложениях Windows, в частности, в нелокализованной версии MATLAB. Разрешение проблемы состоит в следовании рекомендациям, которые дают эффект для других программ, например, Adobe Photoshop. Данные советы, связанные с изменением кодовой страницы, легко найти в соответствующих пособиях или в Интернете при помощи любого поискового сервера, набрав в строке запроса, например, "русские символы photoshop". См. также замечание в paid. "Оформление графиков"главы 3.

Сравнение двух строк выполняется функцией strcmp, которая возвращает логическую единицу для равных строк и ноль в противном случае:

» strl = abcl23def098gh*; » str2 = abcl23def098gh; » rez = strcmp(strl, str2) rez -

1

Функция stmcmp позволяет установить совпадение первых нескольких символов в двух строках, она используется так же, как strcmp, только в качестве третьего параметра следует указать число сравниваемых символов от начала строк:

>> strl = Hello, World!1;

» str2 = Hello, Igor!,-

» rez = stmcmp (strl, str2, 5)

rez =


Функция st г rep заменяет все встречающиеся подстроки на другие, первый ее входной аргумент является строкой, в которой следует произвести изменения, второй — подстрокой, подлежащей замене, а третий — подстрокой с образцом замены. Замените, например, "6.5" на "7.0" в предложении "MATLAB 6.5 является последней версией пакета". Используйте strrep так, как указано ниже:

>> str = MATLAB 6.5 является последней версией пакета; » newstr = strrep(str, 6.5, "7.0) newstr =

matlab 7.0 является последней версией пакета

Преобразование всех прописных букв в строчные производит функция upper. Функция lower осуществляет обратное преобразование. Строка, требующая преобразования, задается входным аргументом данных функций. Функция is char проверяет, является ли входной аргумент строкой или нет, возвращая логическую единицу или ноль соответственно.

Другие функции описаны в следующих разделах, посвященных созданию простых программ с интерфейсом пользователя из командной строки рабочей среды MATLAB (полный список сервисных функций обработки строк приведен в приложении I).

Перечисленные выик- функции значительно облегчают труд программиста, избавляя его от необходимости самостоятельного программирования алгоритмов поиска и замены. Заметьте, что изложенных в предыдущей главе сведений вполне достаточно для написания собственных файл-функций, выполняющих аналогичные действия. Действительно, поскольку строки хранятся в одномерном массиве символов, то перебором всех элементов строки в цикле можно осуществить поиск и замену одних подстрок на другие. В качестве упражнения напишите файл-функцию strnumpos, которая находит позиции всех цифр, входящих в строку, и возвращает результат в виде вектора. Примените цикл for для перебора всех символов строки и if для проверки на цифру. Воспользуйтесь листингом 8.1 в случае возникновения затруднений.

I Листинг 8.1. Файл-функция strnumpos для поиска цифр в строке

function pos = strnumpos(str)

Ь функция strnumpos возвращает позиции цифр в строке

% использование: pos = strnumpos(str)

%strnumpos(str)

% проверка входных и выходных аргументов

% допускается не более одного выходного аргумента

if nargout > 1


error(функция имеет не более одного выходного аргумента)

end

% должен быть один входной аргумент if nargin ~= 1

error(должен быть один входной аргумент)

end

I входной аргумент должен быть строкой if ~ischar(str)

error(входной аргумент должен быть строкой) end

% вычисляем длину строки slen = length(str);

% обнуляем счетчик числа цифр в строке digits = 0;

% создаем пустой массив для хранения позиций цифр в строке pos = [ ];

% перебираем в цикле все символы строки for k = 1:slen

% проверяем, является ли текущий символ str(к) цифрой if (str(к) == 0) (str(к) ==•!•) (str(к) == 2) ... (str(k) == 3) (str(k) == 4) I (str(k) == 5) ... (str(к) == 6) I (str(k) == 7) I (str(k) == 8) ... (str(k) = 9)

% текущий символ str(k) — цифра, поэтому % увеличиваем счетчик числа цифр на единицу digits = digits + 1;

% добавляем позицию цифры в массив pos, увеличивая его длину pos(digits) = k; end

end

Далее в mioii главе в разд. "Диалоговая отладка программ" функция strnumpos реализована в более компактной форме.

Массивы строк

Удобной возможностью организации строковых переменных являются массивы строк, которые формируются так же, как обычные вектор-столбцы, но



0 ... 131 132 133 134 135 136 137 ... 365