Сделай Сам Свою Работу на 5

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





Выше говорилось, что основным типом переменных в 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 Все материалы защищены законодательством РФ.