Strings cadeias de caracteres Prof Omero Francisco Bertol
Strings (cadeias de caracteres) Prof. Omero Francisco Bertol (omero@utfpr. edu. br) Setembro/ 2020
String (cadeia de caracteres) • sequência de zero ou mais caracteres ASCII: letras, números e símbolos especiais • na linguagem Octave denotadas entre aspas dupla ou aspas simples, por exemplo: >> s 1 = "Exemplo 1 de String"; >> s 2 = 'Exemplo 2 de String'; >> typeinfo(s 1), typeinfo(s 2) ans = string ans = sq_string >> • como nos vetores os caracteres de uma cadeia podem ser individualizados através de um índice, entre parênteses (), que indica a posição do caractere na cadeia: – s(i), faz referência ao i-ésimo caractere da String “s”
A Tabela ASCII (American Standard Code for Information Interchange) é usada pela maior parte da indústria de computadores para a troca de informações. Funções: toascii: retorna a ordem do caractere indicado char: retorna o caractere da ordem indicada >> toascii('Ap') ans = 65 112 >> char(65), char(112) ans = A ans = p Cada caractere é representado por um código de 8 bits, ou seja, um byte. 28 = 256 caracteres: 0 31 Caracteres de Controle 32 127 ASCII Normal 128 255 ASCII Estendida
Tabela ASCII printf("Maiúsculas: n") for i=65: 90 printf("%c", char(i)); endfor printf("nn. Minúsculas: n") for i=97: 122 printf("%c", char(i)); endfor 65 90 printf("nn. Números: n") for i=48: 57 printf("%c", char(i)); endfor Maiúsculas: ABCDEFGHIJKLMNOPQRSTUVWXYZ printf("n"); 97 Minúsculas: abcdefghijklmnopqrstuvwxyz 48 Números: 0123456789 >> 57 122
Variáveis String (1/3) Declarando uma String vazia: >> s = "" >> length(s) ans = 0 função "length" retorna o tamanho da String Atribuindo uma String: >> nome = "Juca Bala" >> typeinfo(nome) ans = string >> printf("Nome: %sn", nome); Nome: Juca Bala %s especificador de formato para o tipo String
Variáveis String (2/3) Criando uma String com "n" espaços em branco: >> s = blanks(20); >> typeinfo(s) ans = string função "blanks" retorna uma String com "n" espaços em branco >> length(s) ans = 20 Concatenando Strings ([ ]): >> ola = "Olá Mundo Octave!!!"; >> nome = "Prof. Omero Francisco Bertol"; >> aula = [ola, "nby ", nome]; >> printf("%sn", aula); Olá Mundo Octave by Prof. Omero Francisco Bertol
Variáveis String (3/3) Atribuindo a entrada de dados (input): nome = input("Nome: ", "s"); sexo = input("Sexo: ", "s"); printf("n"); if ((sexo == "m") || (sexo == "M")) printf("Seja bem-vindo Sr. %s. n", nome); else printf("Seja bem-vinda Sra. %s. n", nome); endif Nome: Juca Bala Sexo: M Nome: Marília de Dirceu Sexo: F Seja bem-vindo Sr. Juca Bala. >> Seja bem-vinda Sra. Marília de Dirceu. >>
Comparando Strings • strcmp(<s 1>, <s 2>): retorna 1 (true) se todos os caracteres da Strings “s 1” e “s 2” são os mesmos, e 0 (false) em caso contrário. s 1 = input("S 1: ", "s"); s 2 = input("S 2: ", "s"); printf("n"); S 1: Pato Branco PR S 2: Pato Branco Strings diferentes!!! >> if (strcmp(s 1, s 2) == 1) printf("Strings iguais!!!n"); else printf("Strings diferentes!!!n"); endif S 1: Pato Branco S 2: Pato Branco Strings iguais!!! >>
Concatenação (1/2) Concatena (ou junta) o conteúdo de variáveis ou valores String. >> parte 1 = "Omero"; >> parte 2 = "Francisco"; >> parte 3 = "Bertol"; 1) usando a função strcat(s 1, s 2, s 3, …): >> nome = strcat(parte 1, parte 2, parte 3); >> printf("%sn", nome); Omero. Francisco. Bertol 2) enumerando os valores entre colchetes: >> nome = [parte 1, " ", parte 2, " ", parte 3]; >> printf("%sn", nome); Omero Francisco Bertol
Concatenação (2/2) Concatena (ou junta) o conteúdo de variáveis ou valores String. >> parte 1 = "Omero"; >> parte 2 = "Francisco"; >> parte 3 = "Bertol"; 3) usando a função strjoin: enumerando as partes juntadas entre {} e delimitador default (espaço em branco): >> nome = strjoin({parte 1, parte 2, parte 3}); >> printf("%sn", nome); Omero Francisco Bertol usando um delimitador: >> frutas = strjoin({"uva", "laranja", "pera"}, "; ") frutas = uva; laranja; pera o
Saída Formatada (sprintf) retorna uma String formatada através da utilização de especificadores de formato (%) >> n = 7; >> i = 5; >> resp = sprintf("{ %d x %d = %d }n", n, i, (n*i)); n >> typeinfo(resp); ans = string >> printf("%sn", resp); { 7 x 5 = 35 } i (n*i) especificadores de formato: %d para valores inteiros %i para valores inteiros %f para valores com ponto flutuante %s %c para valores String para valores caracteres
Composição (%) juntar valores a uma String através de especificadores de formato. nome = "Juca Bala"; idade = 33; result = sprintf("%s, tem %d anos. ", nome, idade); printf("%snn", result); salario = 950. 75; printf("{ Salário = R$ %. 2 f }n", salario); especificadores de formato: %d para valores inteiros %f para valores com ponto flutuante %s para valores String %c para valores caracteres Juca Bala, tem 33 anos. { Salário = R$ 950. 75 } >>
Exemplificando a composição (%) em Strings (1/3) • composição com números decimais (%d): >> idade = 7; >> printf("Idade = [%d] anos. n", idade); Idade = [7] anos. # alinhando (ou justificando) à direita >> printf("Idade = [%2 d] anos. n", idade); Idade = [ 7] anos. # preenchendo com 0 s (zero) à esquerda >> printf("Idade = [%02 d] anos. n", idade); Idade = [07] anos. # alinhando (ou justificando) à esquerda >> printf("Idade = [%-2 d] anos. n", idade); Idade = [7 ] anos.
Exemplificando a composição (%) em Strings (2/3) • composição com números de ponto flutuante (%f): >> salario = 980. 75; >> printf("Salário = R$ %fn", salario); Salário = R$ 980. 750000 # apresentando o valor com 2 casas decimais >> printf("Salário = R$ %. 2 fn", salario); Salário = R$ 980. 75 # apresentando o valor em 10 posições (justificando à # direita), sendo 2 posições para o valor decimal >> printf("Salário = R$ %10. 2 fn", salario); Salário = R$ 980. 75 1 2 3 4 5 6 7 8 9 10
Exemplificando a composição (%) em Strings (3/3) • composição com Strings (%s): >> nome = "Juca Bala"; >> salario = 980. 75; >> printf("%s {R$ %. 2 f}n", nome, salario); Juca Bala {R$ 980. 75} # alinhando (ou justificando) à direita >> printf("%20 s {R$ %. 2 f}n", nome, salario); Juca Bala {R$ 980. 75} # alinhando (ou justificando) à esquerda >> printf("%-20 s {R$ %. 2 f}n", nome, salario); Juca Bala {R$ 980. 75}
Fatiamento (slicing) Obter fatias (partes) da String, por exemplo: nome(1: 4); o resultado será uma fatia, com 4 caracteres, da String “nome” obtida a partir do primeiro (1) caractere até o quarto (4). nome(i) %c J u c a 1 2 3 4 >> nome = "Juca Bala"; >> printf("%cn", nome(1)); J # somente o primeiro caractere >> printf("%sn", nome(1: 4)); Juca # da posição 1 até a posição 4 >> printf("%sn", nome(6: end)); Bala # da posição 6 até a última (end) >> printf("%sn", nome(3: 7)); ca Ba # da posição 3 até a posição 7 5 %s B a l a 6 7 8 9 >> printf("%sn", nome(: )); Juca Bala # toda a String >> printf("%sn", nome(end: -1: 1)); ala. B acu. J # toda a String invertida >> printf("%sn", nome(1: 2: end)); Jc aa # somente as posições ímpares >> printf("%sn", nome(2: 2: end)); ua. Bl # somente as posições pares
Entrada de dados String nome = input("Informe o seu nome: ", "s"); printf("n"); printf("typeinfo(nome) = %snn", typeinfo(nome)); printf("Seja bem-vindo(a) %s. n", nome); Informe o seu nome: Juca Bala "s" indica que o valor na entrada de dados será do tipo String %s especificador de formato para o tipo String typeinfo(nome) = sq_string Seja bem-vindo(a) Juca Bala. >> typeinfo(<variável>) retorna o tipo de dados da variável
Saída de dados String nome = input("Nome: ", "s"); printf("n"); printf("Seja bem-vindo(a) %s. nn", nome); n = length(nome); for i=1: n printf("nome(%d) = %cn", i, nome(i)); endfor %s especificador de formato para o tipo String %c especificador de formato para o tipo caractere length(s) retorna o tamanho (quantidade de caracteres) da String "s" Nome: Juca Bala Seja bem-vindo(a) Juca Bala. nome(1) nome(2) nome(3) nome(4) nome(5) nome(6) nome(7) nome(8) nome(9) >> = = = = = J u c a B a l a
Conversões de Strings (1/4) • hex 2 dec(<str>): retorna o valor inteiro da representação hexadecimal na String “str”. • dec 2 hex (<vlr>): retorna a representação hexadecimal no formato String do valor inteiro positivo “vlr”. >> vlr = hex 2 dec("FF"); ou >> printf("FF = %dn", vlr); FF = 255 >> typeinfo(vlr) ans = scalar >> hex = dec 2 hex(255); >> printf("255 = %sn", hex); 255 = FF >> typeinfo(hex) ans = sq_string >> vlr = hex 2 dec("ff");
Conversões de Strings (2/4) • bin 2 dec(<str>): retorna o valor inteiro da representação binária na String “str”. • dec 2 bin (<vlr>): retorna a representação binária no formato String do valor inteiro positivo “vlr”. >> vlr = bin 2 dec("1111"); >> printf("1111 = %dn", vlr); 1111 = 255 >> typeinfo(vlr) ans = scalar >> bin = dec 2 bin(255); >> printf("255 = %sn", bin); 255 = 1111 >> typeinfo(bin) ans = sq_string
Conversões de Strings (3/4) • dec 2 base(<vlr>, <base>): retorna uma String com o o valor inteiro positivo convertido pela base numérica indicada por “base”. >> bin = dec 2 base(255, 2); >> printf("255 = %sn", bin); 255 = 1111 >> hex = dec 2 base(255, 16); >> printf("255 = %sn", hex); 255 = FF >> oct = dec 2 base(255, 8); >> printf("255 = %sn", oct); 255 = 377
Conversões de Strings (4/4) • str 2 num(<str>): retorna o respectivo número resultado da conversão da String “str”. >> a = str 2 num("6"); >> b = str 2 num("2. 50"); >> soma = a + b; >> printf("%d + %. 2 f = %. 2 fn", a, b, soma); 6 + 2. 50 = 8. 50
Acrescentando aspas em uma String Para criar uma constante String, o programa deverá colocar os caracteres desejados dentro de aspas duplas: >> s 1 = "Isto é uma constante de String"; Dependendo do programa, algumas vezes uma constante String deverá conter um caractere aspas, por exemplo: "Pare!", ele disse. Como a linguagem Octave usa as aspas para delimitar as constantes String, é necessário ter uma forma de dizer ao interpretador que deseja-se incluir aspas dentro da String. Para fazer isso, deve-se usar a sequência de escape ("), como demonstrado aqui: >> s 2 = ""Pare!", ele disse. "; >> printf("%s. %sn", s 1, s 2); Isto é uma constante de String. "Pare!", ele disse. >>