Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Matlab_лек.8_Символьные вычисл_Текст.docx
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
183 Кб
Скачать
☆

2.11. Работа со строками [1, с. 386].

Операции со строками являются важным элементом программирования в MATLAB. В предыдущих разделах лекций строки неоднократно использовались. Например, в качестве входного аргумента функции plot для задания цвета, типа линии и вида маркера ('ro-') на графике или - для задания имен функций и М-файлов при поиске корней уравнений. Это обычные действия, допустимые со строками в большинстве языков программирования высокого уровня; но MATLAB предоставляет программисту еще и другие возможности. Например, - сформировать команду MATLAB в виде строковой переменной, а затем выполнить ее.

2.11.1. Ввод и сцепление строк.

Строки в MATLAB хранятся в массиве символов. Значение строковой переменной набирается в апострофах . Не завершенная апострофом строка при наборе отображается синим цветом. Пример строковой переменной st (здесь при задании ее значения нет в конце знака “точки с запятой” для того, чтобы сразу увидеть содержание):

» st = ' NGTU - my loved university!'

st =

NGTU - my loved university!

Информация о переменной st в окне Workspace (или в командном окне после вызова функции whos) имеет следующий вид:

Name Size Bytes Class

str 1x27 54 char array

Переменная st является одномерным массивом символов (char array) из двадцати семи элементов, занимающим в памяти 54 байта; каждый символ кодируется двумя байтами. Поскольку строки хранятся в одномерных массивах (также, как числа, но в своем формате), то к ним применимы некоторые операции с вектор-строками, в частности, сцепление.

Индексация позволяет получить доступ к символам строковой переменной, причем возможно обращение к одному элементу, а также выделение в отдельную строку нескольких идущих подряд символов при помощи двоеточия. Например, можно переставить слова в строковой переменной:

»str = 'Hello, World!'

str =

Hello, World!

» strnew = [str(8:12) str(6:7) str(l:5) str(13)]

strnew =

World, Hello!

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

» strl = str(8:12);

» str2 = str(6:7);

» str3 = str(l:5);

» str4 = str(13);

» newstr = strcat(strl, str2, str3, str4)

newstr =

World,Hello!

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

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

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

» substr = ' строк ' ;

» роs = findstr(str, substr)

pos =

15 36

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

Примечание :

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

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

» str1 = 'abc123def098gh';

» str2 = 'abc123def098gh';

» rez = strcmp(str1, str2)

rez =

1

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

»str1 = 'Hello, World!';

»str2 = 'Hello, Igor!';

» rez = strnemp(str1, str2, 5)

rez =

1

Функция strrep заменяет все встречающиеся подстроки на другие, первый ее входной аргумент является строкой, в которой следует произвести изменения, второй - подстрокой, подлежащей замене, а третий - подстрокой с образцом замены. Например, замена цифр "6.5" на "7.0" в указанной строке:

» str = 'MATLAB 6.5 является последней версией пакета';

» newstr = strrep(str, '6.5' , '7.0')

newstг =

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

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

Есть и другие функции. Полный список сервисных функций обработки строк приведен в [1, приложение 1].

Перечисленные выше функции значительно облегчают труд программиста, избавляя его от необходимости самостоятельного программирования алгоритмов поиска и замены.