Sie sind auf Seite 1von 27

Introdução ao

MATLAB
Conteúdo da Aula
• Definição de Cadeias de Caracteres
• Manipulações de Strings
• Entrada de Strings pelo Usuário
• Conversão de Dados
• Impressão de Resultados
• Formato de Gravação de Dados
• Algumas Funções de Texto
Strings de Caracteres
• Em algumas situações, encontramos a necessidade de
manipulação de texto ao invés do processamento de números.
• Para esta manipulação utilizamos as strings ou cadeias de
caracteres.
• Para definir uma string basta inserir um texto entre aspas simples
(‘’).
• As strings podem ser consideradas vetores numéricos com certos
atributos especiais e seu tratamento pode ser realizado através das
manipulações vetoriais já conhecidas.
• O sistema de indexação, as operações matriciais, a concatenação
vertical e horizontal se dão da mesma forma.
Strings de Caracteres
Exemplo:
>> t='Isso é uma string de caracteres!';
>> b=double(t)
>> size(t)
ans = >> a=[84 101 120 116 111];
1 32
>> char(a)
>> whos ans =
Name Size Bytes Class Texto
Attributes
ans 1x2 16 double
t 1x32 64 char
Strings de Caracteres
Exemplo:
>> r=t(22:31) • A concatenação de strings é
obtida diretamente da
>> s=t(31:-1:22)
concatenação de vetores. Já a
>> txt='Resposta'; função disp exibe a string de
caracteres sem o nome da
>> txt(4:end) variável.
>> u=t(22:31)'
• Para interação com o usuário,
>> v='Caixa d''água‘ emprega-se a função input.

Operador de transposição e apóstrofe


dentro de uma string de caracteres.
Strings de Caracteres
Exemplo:
>> u='Universidade Federal';
disp suprimi
>> v=' de Itajubá'; u=

>> w=[u v]

>> disp(u)
Universidade Federal

>> a=input('Informe os caracteres\n','s') Armazenamento


na classe char
(tipo de variável)
Strings de Caracteres
• As strings de caracteres podem ter múltiplas linhas, contanto que
todas as linhas tenham o mesmo número de colunas, conforme as
regras de manipulação de matriz.

Exemplo: 20 colunas
>> M=['No caso de matrizes,' comprimento
'todas as linhas ' >> F=['Neste caso,'
'devem ter o mesmo ' 'vai dar erro'
'comprimento ' 'certamente'] % segunda linha maior
] ??? Error using ==> vertcat
M= CAT arguments dimensions are not
No caso de matrizes, consistent.
todas as linhas
devem ter o mesmo
Conversão de Texto
Conversão de Texto
char Números ASCII para string
double String para números ASCII
int2str Inteiro para string
mat2str Matriz numérica para string
num2str Número para string
str2num String para número
sprintf Número para string, com controle de formato
fprintf Escreve texto formatado em um arquivo ou na tela
sscanf String para número, com controle de formato
Conversão de Texto
• Em muitas situações, é desejável incorporar um
resultado numérico a uma string.
Exemplo:
>> raio=2.5; area=pi*raio^2;
>> texto=['Um círculo de raio ' num2str(raio) ' possui uma área de '
num2str(area) '.'];
>> disp(texto)
>> size(texto) Aqui a função num2str converte números em
strings para depois, fazer a concatenação
ans =
vetorial. Essas funções, num2str e int2str,
1 49 recorrem para uma sintaxe semelhante à
linguagem C quando substituídas por sprintf ou
fprintf.
Conversão de Texto
Exemplo:
function [x1,x2]=bhaskara(a,b,c) texto=['Os valores das raízes são: '
%BHASKARA Calcula as raízes de uma num2str(x1) ' e ' num2str(x2) '.'];
equação de segundo grau disp(texto)
% Dados os coeficientes a,b e c da
equação de segundo grau: a*x^2+b*x+c x=linspace(-20,20);
% calcula as raízes e plota o gráfico da y=a*x.^2+b*x+c;
parábola de x=[-20,20]. plot(x,y)
xlabel('x')
delta=b^2-4*a*c; texto=['(' num2str(a) ')*x^2+('
x1=(-b+sqrt(delta))/(2*a); num2str(b) ')*x+(' num2str(c) ')'];
x2=(-b-sqrt(delta))/(2*a); ylabel(texto)
title('Equação do Segundo Grau')
fprintf('Os valores das raízes
são:\n%f\n%f\n',x1,x2); end
Conversão de Texto
• sprintf(fmt,dado1,...,dadon): grava dados formatados em uma
cadeia de caracteres.

• fprintf(fp,fmt,dado1,...,dadon): grava dados em arquivo formatado


(apontador do arquivo) ou imprimi dados na Command Window.

• sscanf(s,fmt): lê dados armazenados em uma cadeia de caracteres


e retorna o resultado em um vetor.
Conversão de Texto
• Sintaxe de fmt: %<F><T>.<P><C>

• <F> controle de alinhamento e sinal


Caractere Descrição Exemplo
- Alinhamento à esquerda %-5.2d
+ Sempre imprime sinal dos números %+5.2d
0 Preenche espaços com 0 %05.2d

• <T>: número mínimo de dígitos a serem impressos.

• <P>: número de dígitos à direita do ponto decimal.

• <C>: caractere de identificação de notação.


Conversão de Texto
• <C>: caractere de identificação de notação.
Formato Notação Exemplo Resultado
%c Caractere fprintf(' %c', 'a') a
%s Cadeia de caracteres fprintf(' %s', 'abc') abc
%d Decimal fprintf(' %5.3d', pi) 3.142e+000
%f Ponto flutuante fprintf(' %5.3f', pi) 3.142
%e Exponencial fprintf(' %5.3e', pi) 3.142e+000
%x Hex. ‘minúscula’ fprintf(' %x', 27) 1b
%X Hex. ‘maiúscula’ fprintf(' %X', 27) 1B
%o octal fprintf(' %o', 27) 33
Conversão de Texto
• Caracteres especiais que podem ser utilizados nos
formatos:
Caractere Nome Descrição
\b Backspace Retorno de caractere
\f Form feed Avanço de linha
\n New line Pula linha
\r Carriage return Retorno de linha
\t Horizontal tab Tabulação horizontal
\\ Backslash Caractere barra invertida \
\” Quotation mark Caractere aspa ”
%% Percent character Caractere porcentagem %
Conversão de Texto
Exemplo:
% Imprimindo uma matriz em um % Lendo dados de um arquivo .txt
arquivo .txt >> arquivo=fopen('dados.txt','r'); %
>> arquivo=fopen('dados.txt','w'); % Abrindo arquivo de dados para leitura
Criando o arquivo de dados para
gravação >> fgets(arquivo)
>> linha2=fgets(arquivo);
>> A=rand(3) % Matriz 3x3 aleatória >> fc=fclose(arquivo);
>> fprintf(arquivo,'%f %f %f\n', A) >> B=sscanf(linha2,'%f %f %f')
>> fclose(arquivo);
>> type dados.txt fgets já lê a próxima linha e
sempre adiciona um comando
newline ao final de cada uma. O
arquivo dados1.txt deve estar
contido no diretório do MATLAB.
Exercício:
Faça um programa (arquivo m de comandos) que dados dois
inteiros a e b, verifica se a é permutação de b. Dica: trabalhe com
strings de caracteres e conte quantos dígitos de 0 a 9 há em cada
string.

Exemplo:
a = '13579';
b = '35197';
c = '23579';

a e b são permutações, mas c não é permutação de a e b.


conta_digitos.m
function [n0,n1,n2,n3,n4,n5,n6,n7,n8,n9]=conta_digitos(a)
% CONTA_DIGITOS Conta quantos algarismos 0,1,...,9 tem um dado inteiro a na
% forma de string de caracteres

% Inicialização das variáveis


n0=0;n1=0;n2=0;n3=0;n4=0;n5=0;n6=0;n7=0;n8=0;n9=0;

% Contando a quantidade de dígitos de cada tipo


tamanho_a=size(a,2) ;% Número de colunas da string
for k=1:tamanho_a
if a(k)=='0'
n0=n0+1;
end
...
if a(k)=='9'
n9=n9+1;
end
end
end
permutacao.m
clear all; clf; close all; clc;
% Arquivo m de comandos para verificação da permutação
a=input('Entre com o número inteiro a:\n','s');
b=input('Entre com o número inteiro b:\n','s');

% Verificação da permutação
if size(a,2)==size(b,2)
[n0a,n1a,n2a,n3a,n4a,n5a,n6a,n7a,n8a,n9a]=conta_digitos(a);
[n0b,n1b,n2b,n3b,n4b,n5b,n6b,n7b,n8b,n9b]=conta_digitos(b);
if
[n0a,n1a,n2a,n3a,n4a,n5a,n6a,n7a,n8a,n9a]==[n0b,n1b,n2b,n3b,n4b,n5b,n6b,n7b,n8b,n9
b]
fprintf('O inteiro a é permutação do inteiro b\n')
else
fprintf('O inteiro a não é permutação do inteiro b\n')
end
else
fprintf('O inteiro a não é permutação de b\n')
end
Funções de Texto
Funções de Texto
findstr(s1,s2) Procura uma string dentro da outra
ischar(s) Verdadeira se o argumento for uma string
isletter(s) Verdadeira se houver alguma letra do alfabeto
isspace(s) Verdadeira se houver algum espaço em branco
strcat(s1,s2,...) Concatena horizontalmente strings
strvcat(s1,s2,...) Concatena strings verticalmente
strcmp(s1,s2) Verdadeira se as strings forem idênticas
strncmp(s1,s2,n) Verdadeira se os primeiros n caracteres forem idênticos
strrep(s1,s2) Substitui uma string por outra
strtok(s) Mostra os caracteres até determinado símbolo de uma string
upper(s) Converte para maiúsculas
lower(s) Converte para minúsculas
Funções de Texto
• findstr(s1,s2): utilizada geralmente para verificações
gramaticais elementares. Acha uma cadeia dentro de
outra, retornando o índice.
Exemplo:
>> texto='A função findstr encontra uma string em outra';
>> findstr('função',texto) A função find pode ser utilizada quando se
ans = procura apenas um caractere:
3 >> find(texto=='r')
ans =
>> findstr(' ',texto) 16 24 33 44
ans = E quando nada é encontrado?
2 9 17 26 30 37 40 Há diferença entre letras maiúsculas e
minúsculas?
Findstr não funciona com matrizes de strings.
Funções de Texto
• ischar: verifica se é cadeia de caracteres.
• isletter: verifica se é letra
• isspace: verifica se é espaço em branco ‘ ’.

Exemplo:
>> str1='AB 1' >> isletter(str1)
str1 = ans =
AB 1 1 1 0 0
>> ischar(str1) >> isspace(str1)
ans = ans =
1 0 0 1 0
Funções de Texto
• strcat( , ): concatenação horizontal.
• strvcat( , ): concatenação vertical.

Exemplo:
>> a=char('vibracoes','termodinamica'); >> strvcat(str1,str2)
>> b=char(' 18/04',' 10/05'); ans =
>> strcat(a,b) Janeiro
ans = Fevereiro
vibracoes 18/04
termodinamica 10/05
>> str1='Janeiro';
>> str2='Fevereiro';
Funções de Texto
• strcmp( , ): compara cadeias.
• strncmp( , ,n): compara os n primeiros caracteres das
cadeias.
• strcmpi( , ); strncmpi( , ,n): ignora diferença entre letras
maiúsculas e minúsculas.
Exemplo:
>> str1='Matriz'; 0
>> str2='matrizes'; >> strcmpi(str1,str2)
>> strcmp(str1,str2) ans =
ans = 0
0 >> strncmpi(str1,str2,5)
>> strncmp(str1,str2,5) ans =
ans = 1
Funções de Texto
• strrep( ,‘’,‘’): realiza substituições simples de strings em
uma variável tipo char.
Exemplo:
>> texto='A função findstr encontra uma string em outra';
>> strrep(texto,'f','F')
ans =
A Função Findstr encontra uma string em outra
>> strrep(texto,'string','STRING')
ans =
A função findstr encontra uma STRING em outra
Funções de Texto
• strtok( ,‘’): retorna a parte da cadeia que precede a
primeira ocorrência de um caractere delimitador.
• upper(): converte letras em maiúsculo.
• lower(): converte letras em minúsculo.
Exemplo:
>> nome='Sei programar no >> upper(str)
MATLAB & C++'; ans =
>> strtok(nome,'&') ABCDEF
ans = >> lower(str)
Sei programar no MATLAB ans =
>> str='AbCdEf'; abcdef
Exercício:
Escreva uma função (ispalin.m) que retorna 1, se a string for um
palíndromo, e 0, caso contrário. Um palíndromo é uma sentença
que pode ser lida tanto da esquerda para direita, quanto da
direita para a esquerda. Assegure que não haja pontuação e que
as letras são todas minúsculas.

Exemplo:
ispalin('Arara')
ans =
1
Referências Bibliográficas
• Hanselman D., Littlefield B.. MATLAB 6: Curso Completo.
Prentice Hall, São Paulo 2003.
• Matsumoto E. Y.. MATLAB® 6.5: Fundamentos de
Programação. Editora Érica Ltda.

Das könnte Ihnen auch gefallen