e conversão entre tipos de dados Criação de variáveis do tipo string: As strings como arrays uni-dimensionais Operações sobre strings Concatenação Formatação Comparação Procura, Substituição e Separação Instituto Superior Técnico, Dep. de Engenharia Mecânica - ACCAII
Os diferentes tipos de dados em MATLAB: MATLAB Data Types double single int8, unit8 int16, uint16 logical char int16, uint16 int32, unit32 uint32 int64, unint64 logical data character strings double precision (real and complex) single precision (real and complex) int8, uint8 int64, uint64 integer and unsigned integer data types cell structure user classes function handles cell arrays structures objects function handles 2
Definição de string: Uma string em MATLAB consiste num array (tabela) uni-dimensional (um vector) de elementos do tipo char. O tipo char (caracter) é guardado como um inteiro de 16 bits sem sinal. O construtor de uma string são as plicas: exemplo 3
Como construir uma string (exemplo): >> s='computação e Programação' s = Computação e Programação >> whos s Name Size Bytes Class Attributes s 1x24 48 char 4
As strings como vectores de caracteres: Logo, muitas operações em arrays uni-dimensionais podem ser aplicadas a strings: >> length('gato') 4 >> length(' ') 1 >> length('') 0 5
As strings como vectores de caracteres (exemplos): >> aminhastring='olá'; >> aminhastring(3) á >> aminhastring' O l á >> aminhastring(2:end) lá 6
Matrizes, em que cada linha é uma string (exemplos): >> aminhamatriz=['bom';'dia';'zé!'] aminhamatriz = Bom dia Zé! >> [lin,col]=size(aminhamatriz) lin = 3 col = 3 7
Matrizes, em que cada linha é uma string (exemplos): >> aminhamatriz_2=['bom';'dia';'josé!']??? Error using ==> vertcat CAT arguments dimensions are not consistent. As linhas de uma matriz de caracteres têm que possui o mesmo número de colunas >> aminhamatriz_3=['bom ';'dia ';'José!'] aminhamatriz_3 = Bom dia José! >> size(aminhamatriz_3) 3 5 8
Operações em strings : O MATLAB possui muitas funções pré-definidas que operam em strings (ver help associado): Função strcat strvcat char blanks sprintf deblank Contenação horizontal Contatenação vertical Descrição Converte código ASCII num caracter, ou cria uma matriz de caracteres Cria uma string com n carateres em branco Cria uma string formatada (mas não a escreve!) Remove os espaços em branco do fim de uma string 9
Operações em strings (continuação): O MATLAB possui muitas funções pré-definidas que operam em strings (ver help associado): Função upper lower strcmp strncmp strcmpi Descrição Converte todos os carateres para maiúsculas Converte todos os carateres para minúsculas Compara strings. Devolve um valor lógico. Compara apenas os primeiros n caracteres de strings. Devolve um valor lógico. Compara strings, ignorando se os caracteres são maiúsculos ou minúsculos. Devolve um valor lógico. 10
Operações em strings (continuação): findstr strfind strtrim strrep strtok O MATLAB possui muitas funções pré-definidas que operam em strings (ver help associado): Função Descrição Procura as ocorrências da string menor, numa string maior. Retorna um índice ou array de indíces. Similar a função anterior, mas a ordem dos argumentos é: (string,substring). Elimina os espaços (caracteres) em brancos iniciais e finais de uma string. Procura todas as ocorrências de um sub-string, numa string, e substitui essas por outra sub-string. Separa uma string em duas sub-strings, mediante um delimitador. 11
Concatenação (exemplos): >> s1='bom'; >> s2='dia'; >> s3='josé'; >> s4=[s1,' ',s2,' ',s3,'!'] s4 = Bom dia José! 12
Concatenação (exemplos): >> strcat(s1,s2,s3) % CONATENAÇÃO HORIZONTAL BomdiaJosé >> s1='bom'; >> s2=' dia '; >> s3='josé'; >> strcat(s1,s2,s3) % REMOVE OS ESPAÇOS EM BRANCOS FINAIS DE CADA STRING Bom diajosé 13
Concatenação (exemplos): >> s4=strvcat(s1,s2,s3) % CONCATENAÇÃO VERTICAL s4 = Bom dia José >> size(s4) % NOTAR QUE strvcat ADICIONA CARACTERES EM BRANCO % NO FIM DAS MENORES STRINGS 3 9 14
Concatenação (exemplos): >> s1='bom'; >> s2=' dia '; >> char(98) b >> s3='josé'; >> s4 = char(s1,s2,s3) % CRIA UMA MATRIZ, EM QUE CADA LINHA É UMA STRING s4 = Bom dia José >> size(s4) 3 9 15
Formatação (exemplos): >> s1='bom'; >> s2='dia'; >> s3='josé'; >> s4=[s1,blanks(1),s2,blanks(1),s3] % COLOCA n ESPAÇOS EM BRANCO s4 = Bom dia José 16
Formatação (exemplos): >> s1='bom'; >> s2='dia'; >> s3='josé'; >> s4=sprintf('%s %s %s',s1,s2,s3) % FUNCIONA COMO O FPRINTF, MAS O % OBJECTIVO É CRIAR VARIÁVEIS DO % DO TIPO STRING s4 = Bom dia José 17
Formatação (exemplos): >> string_dado = sprintf('dado lançado: %d',randint(1,1,[1,6])) string_dado = Dado lançado: 1 >> string_dado = sprintf('dado lançado: %d',randint(1,1,[1,6])) string_dado = Dado lançado: 6 >> string_dado = sprintf('dado lançado: %d',randint(1,1,[1,6])) string_dado = Dado lançado: 4 18
Formatação (exemplos): >> s3=char('olá','maria') s3 = Olá Maria >> s4=sprintf('%s %s!',deblank(s3(1,:)),deblank(s3(2,:))) s4 = Olá Maria! % OS CARACTERES EM BRANCO FINAIS, DE CADA STRING % SÃO ELIMINADOS >> s5=upper(s4) s5 = OLÁ MARIA! >> s6=lower(s4) s6 = olá maria! 19
Formatação (exemplos): >> s1=' Esta frase é de teste! '; >> size(s1) 1 29 >> s2=strtrim(s1) % ELIMINA OS CARACTERES EM BRANCO INICIAIS E FINAIS s2 = Esta frase é de teste! >> size(s2) 1 22 20
Comparação de strings (exemplos): >> s1='mariana'; >> s2='maria'; >> strcmp(s1,s2) 0 >> strncmp(s1,s2,5) 1 >> strcmpi(upper(s1),lower(s2)) 0 21
Comparação de strings (exemplos): >> s1='mariana'; >> s2='maria'; >> strcmp(s1,s2) 0 >> strncmp(s1,s2,5) 1 >> strcmpi(upper(s1),lower(s2)) 0 >> strcmpi(upper(s1(1:5)),lower(s2)) 1 22
Procurar sub-strings (exemplos): >> s1='aretddjhddide'; >> res=findstr(s1,'dd') % RETORNA O(s) 1º(s) ÍNDICE(s) ONDE A SUBSTRING É % ENCONTRADA NA STRING DE MAIOR COMPRIMENTO res = 5 9 >> res=findstr('dd',s1) % A ORDEM DOS ARGUMENTOS É INDIFERENTE! res = 5 9 23
Procurar sub-strings (exemplos): >> s1='aretddjhddide'; >> res=strfind(s1,'dd') % RETORNA O(s) 1º(s) ÍNDICE(s) ONDE A SUBSTRING % (OU SEJA, O 2º ARGUMENTO) É % ENCONTRADA NA STRING (OU SEJA, O 1º ARGUMENTO) res = 5 9 >> res=strfind('dd',s1) res = [] % A ORDEM DOS ARGUMENTOS É IMPORTANTE!!!! 24
Procura e substituição de sub-strings (exemplos): >> s1='aretddjhddide'; >> s2=strrep(s1,'dd','zzzz') s2 = aretzzzzjhzzzzide 25
Separação de uma string em sub-strings (exemplos): >> s1='esta frase é de teste!'; % POR OMISSÃO O CARACTER DELIMITADOR % É O ESPAÇO EM BRANCO >> [substr substrrestante]=strtok(s1) substr = Esta substrrestante = >> length(s1) 22 >> length(substr) 4 >> length(substrrestante) frase é de teste! 18 26
Separação de uma string em sub-strings (exemplos): >> s1='data: 02-11-2009'; >> [s2 s3]=strtok(s1,':') s2 = Data s3 = : 02-11-2009 >> [s4 s5]=strtok(s3,':') s4 = 02-11-2009 s5 = Empty string: 1-by-0 >> length(s4) 11 27
Referências Capítulo 6 de Stormy Attaway (2009), Matlab: A Practical Introduction to Programming and Problem Solving, Elsevier. Getting started with MATLAB: http://www.mathworks.com/access/helpdesk/help/pdf_doc/ matlab/getstart.pdf 28