STRINGS
A boa compreensão sobre strings é fundamental em qualquer linguagem de programação,
uma vez que toda a informação visual passada ao usuário é realizada mediante a manipulação
desses vetores de caracteres. Porém, diferentemente do C, onde um char poderia ser tratado
diretamente como um tipo numérico, no MATLAB, o tipo char é tratado como uma classe não
numérica. A Figura 1 apresenta um resumo sobre as classes de dados do MATLAB, onde essa
diferença básica pode ser constatada.
Figura 1 - Classes de dados no MATLAB.
A representação de caracteres no MATLAB segue o chamado Standard Unicode, e pode
utilizar o formato UTF-8 ou o UTF-16 dependendo dos caracteres utilizados. Não entraremos em
detalhes sobre essas representações. Nesta aula veremos tão somente algumas funções e
operações envolvendo strings no MATLAB.
Como visto em alguns exemplos anteriormente, strings são definidas entre aspas simples
no MATLAB:
clc
str = 'The Stars Look Down'; disp(str)
whos
Perceba analisando o retorno dos comandos abaixo que a string é um vetor, portanto pode
ser indexada exatamente como vetores numéricos.
disp(str(1)) disp(str(5:9))
str([8 3 end (end-2)])
Pode-se informar à função input que o dado lido será texto. Isso é realizado mediante ao
envio de mais um argumento para a função ('s'). Execute os comandos abaixo e tente escrever
qualquer texto em ambas as solicitações.
Quando a segunda função é executada, o dado digitado é encarado como texto, sem a
necessidade do uso das aspas simples.
Pode-se também formar arranjos de strings (concatenando várias strings). São várias
funções que podem ser utilizadas para esse processo: strcat(), strvcat(), char().
srtcat() concatena strings passadas como argumentos em uma só string, formando uma
matriz linha composta pela concatenação horizontal das strings.
srtvcat() concatena strings verticalmente, de modo a formar uma matriz onde cada linha
é uma string passada como argumento da função.
A função char() converte inteiros sem sinal em seu equivalente pelo formato Unicode (os
127 primeiros caracteres coincidem com a tabela ASCII). Essa função também pode ser utilizada
para concatenar várias strings verticalmente.
Execute os comandos abaixo e observe atentamente o que é apresentado na tela. Perceba
que as funções automaticamente preenchem as strings com caracteres espaços de modo a formar
uma matriz realizável no MATLAB.
clc clear all
str1 = 'Rush,'; str2 = 'o';
str3 = 'Power Trio';
a = int8([76 105 109 98 111]); ac = char(a);
disp('Vator a:') disp(a)
disp('Vetor Convertido ac') disp(ac)
str4 = char(a,str1); disp('Str4:')
disp(str4)
str5 = strcat(str1,str2,str3,',Show!!'); disp('Str5:')
disp(str5)
str6 = strvcat(str1,str2,str3,'Ok!'); disp('Str6:')
disp(str6) disp('----') whos
A concatenação de strings pode ser realizada utilizando a manipulação direta de matrizes,
como fora visto nas últimas aulas, porém é importante que a concatenação resultante seja
realizável, ou seja, na concatenação vertical, as strings devem possuir o mesmo número de
caracteres, caso contrário, a matriz não será formada corretamente. Tente executar as linhas
apresentadas na sequência:
str1 = 'Sertanejo'; str2 = ' é melhor que '; str3 = 'Rock';
Perceba que a primeira das duas concatenações (horizontal) foi executada. Já a segunda
operação (concatenação vertical) retornou uma mensagem de erro, uma vez que não foi possível
montar uma matriz válida. As matrizes menores devem ser preenchidas com espaços para que
possuam o mesmo número de caracteres antes da realização da concatenação utilizando este tipo
de expressão.
C
ONVERSÃO DEN
ÚMEROS PARAS
TRINGSExistem funções dedicadas para a conversão de dados numéricos (classe numérica) para
dados de texto (classe char). Essas funções são int2str() e num2str(). A primeira função,
int2str(), converte um inteiro para seu equivalente representado por caracteres. Caso o
número não seja um inteiro, a função arredondará o número antes da execução da função. Já a
função num2str() converte um número qualquer para seu equivalente string, permitindo,
inclusive, a especificação de um formato, seguindo os códigos de formato e a sintaxe de
formatação do comando fprintf(). O código abaixo ilustra o funcionamento das funções.
clear all format compact clc
a = 10*rand(1,5) b = [1 5 76 235] c = int2str(a) d = int2str(b) whos
c = num2str(a)
d = num2str(a,'%10.5f') e = num2str(a,'|Opa:%-15e') f = num2str(a,'|Opa:%15e') format loose
whos
C
ONVERSÃO DES
TRINGS PARAN
ÚMEROS,
M
ATRIZES EC
OMANDOS:
EVAL()
A função eval() tem especial importância para esta disciplina, uma vez que trabalharemos
em um futuro muito próximo com manipulação simbólica no MATLAB, e a função eval() será
utilizada com certa frequência para a obtenção de resultados numéricos para as expressões
simbólicas simplificadas ou obtidas via funções de manipulação da classe simbólica. Esta função
avalia uma string e transforma a string em um comando equivalente no MATLAB, executando-o.
clc
'194'*10 %tente explicar o que ocorre aqui... eval('128')
a = eval('185')*12; disp(a)
'A = [1 2 3 4]'
C
OMPARAÇÃO,
B
USCA ES
UBSTITUIÇÃOO MATLAB possui funções dedicadas para comparar, realizar buscas e, inclusive, substituir
pedaços de strings por outras strings. Algumas das funções que se enquadram nesse tipo:
strcmp(), strncmp(), findstr(), strmatch(), strrep() e strtok(). Algumas dessas funções
serão descritas brevemente na sequência, porém é aconselhado a leitura da saída do comando
help para todas as funções citadas.
A função strcmp() compara duas strings passadas como argumentos da função,
retornando verdadeiro (um) se elas forem iguais e falso (zero) caso sejam diferentes. Cuidado, pois
seu resultado difere de como era na linguagem C. strncmp() compara apenas os n primeiros
caracteres da string (o parâmetro n deve ser utilizado como último argumento da função).
findstr() retorna os índices de todas as ocorrências de uma string em outra. A primeira
string passada para a função é a string onde a busca será efetuada. Logicamente, a segunda string
passada para a função será a string a ser buscada.
strrep() realiza a substituição de um pedaço de uma string por outra string, retornando a
string resultante.
Uma operação interessante é realizada pela função strtok(). Ela divide a string segundo
um delimitador (um caractere). Tal delimitador (que inclusive pode ser mais de um) é especificado
na função como último argumento. Caso não seja especificado um caractere, a função utilizará
como delimitador o caractere espaço.
Para correta compreensão da sintaxe e funcionalidade envolvida na execução de comandos
com essas funções, estude o código abaixo.
clc
str1 = 'Opa! Olha como é fácil manipular matrizes no MATLAB'; str2 = 'Opa!';
strcmp(str1,str2) strncmp(str1,str2,4) findstr(str1,'Opa!') findstr(str1,'ma')
str3 = strrep(str1,'Olha','Mira!!'); disp(str3)
[a,b] = strtok(str1,'r'); %a ultima string lista os possíveis
disp(a) %delimitadores
disp(b)
[a,b] = strtok(str1,'pr'); %que podem ser vários. disp(a)
disp(b)
[a,b] = strtok(str1); %o delimitador será espaço nesse caso disp(a)
disp(b)
A
LTERARC
AIXA(A
LTA/
B
AIXA)
clc
str1 = 'Opa! Olha como é fácil manipular matrizes no MATLAB'; str2 = upper(str1);
disp(str2);
str3 = lower(str2); disp(str3)
E
XERCÍCIOSExercício 1 A conversão de bases numéricas não será abordada. Como exercício, porém, leia a
saída do comando help para as seguintes funções de conversão de base: dec2bin(), dec2hex() e dec2base().
Exercício 2 Crie um script que leia seu nome em strings separadas, após, concatene horizontal e
verticalmente as strings de seu nome.
Exercício 3 Crie um script que lê seu nome e separe nome e sobrenome em strings separadas.
Exercício 4 Escreva um script que conta as vogais em uma string digitada do teclado.
Exercício 5 Escreva um script que muda a caixa (para maiúsculas) da primeira palavra de uma