Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
matlab_final.doc
Скачиваний:
80
Добавлен:
24.09.2019
Размер:
5.3 Mб
Скачать

1.6. Ввод, вывод и работа со строками

Выше говорилось, что основным типом переменных в 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 =

123

>> string_123 = '123'

string_123 =

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 =

123

>> 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 =

0

>> z = str2double ('is not number')

z =

NaN

>> isnan (z)

ans =

1

Для конкатенации (объединения) строк есть несколько способов. Первый способ подразумевает работу со строками как с матрицами и объединение их подобным образом. Например:

>> 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 =

15

>> 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]