Ввод, вывод и работа со строками
Выше говорилось, что основным типом переменных в MATLAB являются матрицы, однако, кроме матриц, существуют и другие типы переменных, в частности, строки. Под строкой понимается последовательность символов. Строки создаются с помощью одинарных кавычек. Например:
>> hello_string = 'hello'
hello_string =
hello
В данном случае была создана переменная hello_string, которая содержит значение «hello». Можно узнать информацию об этой переменной с помощью команды whos:
>> whos hello_string
Name Size Bytes Class Attributes
hello_string 1x5 10 char
Видно, что строка hello_string имеет длину 5 символов и занимает 10 байт.
Для выделения части строки можно использовать те же операции индексирования, что и для матриц. Например:
>> hello_string = 'hello, MATLAB'
hello_string =
hello, MATLAB
>> hello_string(1)
ans =
h
>> hello_string(end)
ans =
B
>> hello_string(1: 5)
ans =
hello
>> hello_string(8: end)
ans =
MATLAB
Важно понимать различия между числами и их строковыми представлениями. В следующем примере переменные number_123 и string_123 имею разный тип и, соответственно, принципиально разное значение.
>> number_123 = 123
number_123 =
>> string_123 = '123'
string_123 =
>> whos
Name Size Bytes Class Attributes
number_123 1x1 8 double
string_123 1x3 6 char
В таблице 1.5 приведен список наиболее часто используемых функций для работы со строками.
Таблица 1.5
Функция
| Описание
| num2str
| Преобразование числа в его строковое представление
| str2double
| Преобразование строкового представления числа в число
| sprintf
| Форматирование данных
| strcat
| Конкатенация (объединение) строк
| strcmp
| Сравнение строк с учетом регистра
| strcmpi
| Сравнение строк без учета регистра
| strrep
| Замена подстроки в строке
| strtrim
| Удаление пробелов, знаков табуляции и перевода строк в начале и конце строки
| isempty
| Возвращает 1, если длина строки равна 0, и 1 в противном случае
| length
| Расчет длины строки
| findstr
| Поиск подстроки в строке
|
Чтобы преобразовать число в его строковое представление, используется функция num2str, которая в простейшем случае принимает числовое значение и возвращает строку. Например:
>> result_str = num2str (123)
result_str =
>> whos result_str
Name Size Bytes Class Attributes
result_str 1x3 6 char
Существуют другие способы использования функции num2str, в частности, можно задавать количество знаков после запятой для форматирования дробных чисел. Более подробно о других способах использования этой функции написано в документации MATLAB.
Для выполнения обратной операции, то есть для преобразования строкового представления числа в число используется функция str2double. Эта функция возвращает число, соответствующее строковому представлению или NaN, если строку невозможно преобразовать в число. Кроме того, с помощью функции str2double можно создавать комплексные числа. Например:
>> x = str2double ('123.456')
x =
123.4560
>> whos x
Name Size Bytes Class Attributes
x 1x1 8 double
>> y = str2double ('-5 + 8j')
y =
-5.0000 + 8.0000i
>> whos y
Name Size Bytes Class Attributes
y 1x1 16 double complex
>> z = str2double ('is not number')
z =
NaN
Для проверки успешности выполнения преобразования из строки в число удобно использовать функцию isnan, которая возвращает 1, если в качестве аргумента передано значение NaN, или 0 в противном случае.
>> x = str2double ('123.456')
x =
123.4560
>> isnan (x)
ans =
>> z = str2double ('is not number')
z =
NaN
>> isnan (z)
ans =
Для конкатенации (объединения) строк есть несколько способов. Первый способ подразумевает работу со строками как с матрицами и объединение их подобным образом. Например:
>> hello_str = 'Hello, ';
>> matlab_str = 'MATLAB';
>> result_str = [hello_str, matlab_str]
result_str =
Hello, MATLAB
Также для конкатенации можно использовать функцию strcat, но в этом случае во всех строках, являющихся параметрами этой функции, будут удалены начальные и конечные пробелы:
>> hello_str = 'Hello, ';
>> matlab_str = 'MATLAB';
>> result_str = strcat (hello_str, matlab_str)
result_str =
Hello,MATLAB
Такими же способами можно объединять одновременно большее количество строк, передавая их в качестве параметров.
До сих пор в примерах для вывода результатов работы команд и функций MATLAB использовалось отображение значений переменных. В этом случае в окно «Command Window» среды MATLAB выводится строка вида:
переменная =
значение переменной
Это может быть не всегда удобно из эстетических соображений. Для наглядности иногда нужно вывести строку без префикса «переменная =», для этого служит функция disp, принимающая в качестве параметра строку или переменную, значение которой надо отобразить. Например:
>> disp ('Hello, MATLAB')
Hello, MATLAB
>> x = [1 2 3; 4 5 6; 7 8 9];
>> disp (x)
1 2 3
4 5 6
7 8 9
Для того, чтобы попросить пользователя ввести какие-то данные с клавиатуры, используется функция input, которая имеет два режима работы. Первый режим заключается в том, что введенные пользователем данные интерпретируются как числа или матрицы. В этом случае синтаксис функции input выглядит следующим образом:
переменная = input (строка_запроса)
После выполнения такой команды в окно «Command Window» будет выведена строка_запроса, а выполнение дальнейших команд будет приостановлено, пока пользователь не введет данные. Функция input возвращает данные, введенные пользователем. Например:
>> input ('Введите данные: ')
Введите данные: 123.456
ans =
123.4560
>> x = input ('Введите данные: ')
Введите данные: [1 2 3; 4 5 6]
x =
1 2 3
4 5 6
>> x = input ('Введите данные: ')
Введите данные: 10.1 + 5j
x =
10.1000 + 5.0000i
>> z = input ('Введите данные: ')
Введите данные: 'Строковое значение'
z =
Строковое значение
Как видно из приведенного примера, пользователь может вводить числа, матрицы, комплексные числа и строки. Строки при этом пользователь должен отмечать одинарными кавычками, как это принято в языке MATLAB. Кроме того, пользователь может вводить не конкретные значения, а имена переменных и даже целые выражения. Например:
>> x = 10;
>> y = 30;
>> z = input ('Введите данные: ')
Введите данные: x + sind (y)
z =
10.5000
В случае если пользователь допустил ошибку, функция input сообщит об этом и попросит повторить ввод:
>> z = input ('Введите данные: ')
Введите данные: xx + sind(y)
Error using input
Undefined function or variable 'xx'.
Введите данные: x + sind (y)
z =
10.5000
Второй режим работы функции input заключается в том, что все вводимые пользователем данные будут интерпретироваться, как строки. Это может быть удобно тем, что пользователь не должен помнить о том, что строки нужно обозначать кавычками, но, в то же время, разработчик скрипта должен сам позаботиться о правильной интерпретации вводимых пользователем данных. Для использования функции input в таком режиме в качестве второго параметра функции input нужно передать строку ‘s’. Например:
>> x = input ('Введите данные: ', 's')
Введите данные: Строковое значение
x =
Строковое значение
>> whos x
Name Size Bytes Class Attributes
x 1x18 36 char
>> y = input ('Введите данные: ', 's')
Введите данные: 15
y =
>> whos y
Name Size Bytes Class Attributes
y 1x2 4 char
Как видите, даже если пользователь введет числовое значение, эти данные все равно будут интерпретироваться, как строки, а для преобразования их в числа нужно будет воспользоваться функцией str2double, описанной выше в этом разделе.
Часто требуется отформатировать данные для удобного представления их пользователю, например, вставить значение каких-то переменных в середину строки, представить данные в 16-ричном виде или в экспоненциальной форме. Для этого предназначена функция sprintf, поведение которой напоминает поведение одноименной функции в языках C и C++. Один из возможных синтаксисов функции sprintf выглядит следующим образом:
результат = sprintf (строка_форматирования, параметры...)
строка_форматирования – это строка, содержащая специальные команды подстановки, которые описывают, каким образом должны форматироваться данные. Для каждой команды подстановки в последующих параметрах функции sprintf должен передаваться соответствующий параметр. Команды форматирования представляют собой последовательность символов, начинающихся со знака %, за которым следует описание формата данных. В таблице 1.6 приведены команды, которые могут быть использованы в строке форматирования.
К каждой команде могут быть добавлены параметры, описывающие способ форматирования (выравнивание, количество знаков после запятой и т.п.), данные параметры подробно описаны в документации MATLAB и в данном пособии не приводятся.
Таблица 1.6
Команда подстановки
| Описание
| %d или %i
| Целое знаковое число
| %u
| Целое беззнаковое число
| %o
| Целое беззнаковое число. Вывод в 8-ричной системе счисления.
| %x
| Целое беззнаковое число. Вывод в 16-ричной системе счисления. Используются прописные буквы a - f.
| %X
| Целое беззнаковое число. Вывод в 16-ричной системе счисления. Используются заглавные буквы A - F.
| %f
| Дробное число. Вывод с фиксированной точкой
| %e
| Дробное число. Вывод в экспоненциальном формате. В качестве знака экспоненты используется “e”.
| %E
| Дробное число. Вывод в экспоненциальном формате. В качестве знака экспоненты используется “E”.
| %g
| Используется наиболее компактная запись: %e или %f
| %G
| Используется наиболее компактная запись: %E или %F
| %c
| Одиночный символ
| %s
| Строка
|
Далее приводятся примеры использования функции sprintf:
>> x = 0.0012345678910;
>> sprintf ('Формат с фиксированной точкой: %f', x)
ans =
Формат с фиксированной точкой: 0.001235
>> sprintf ('Экспоненциальный формат: %e', x)
ans =
Экспоненциальный формат: 1.234568e-003
>> sprintf ('Целое значение: %d. Дробное значение: %f. Строка: %s', ...
100, 0.00556677, 'Hello, MATLAB')
ans =
Целое значение: 100. Дробное значение: 0.005567. Строка: Hello, MATLAB
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|