TEP_Slides-03
Transcrição
TEP_Slides-03
Strings COM11087-Tópicos Especiais em Programação I [email protected] 2016-I Introdução Uma estrutura de dados fundamental Crescente Importância Aplicações: Busca do Google Genoma Humano 2 2016-I Caracteres Codificação Códigos de caracteres são mapeamentos entre os símbolos que compõem um alfabeto e números Computadores são fundamentalmente definidos para trabalhar com números. O que eles sabem é que cada símbolo é representado por um número Exemplos: Alterar a fonte (bit-map) Trocar Idioma do SO 3 2016-I Caracteres Codificação American Standard Interchange (ASCII) Code for Information Usa 1 byte (8 bits) para representar um caractere O bit da esquerda é sempre 0 fazendo com que haja 27 (128) caracteres representados 4 2016-I Caracteres Codificação 5 2016-I Exemplos de Aplicações Todas letras (maiúsculas e minúsculas) e os dígitos aparecem sequenciamente, isso facilita na hora de fazer um loop de “a” até “z”. Caracteres “não imprimíveis” possui os três bits inicias como 0 ou todos os 7 bits como 1. Facilita na eliminação desses caracteres na impressão. Descobrir a posição de um caractere. Subtrair do elemento da primeira posição (“I” – “A”+1) = 9 6 2016-I Exemplos de Aplicações Converter de Maiúscula para mínuscula: “C”“A”+ “a”. Saber se é maíuscula > “A” e < “Z”. Ordem alfabética caracteres. significa ordem dos “Nova Linha” (10) e “Backspace” (13) são caracteres usados para marcar o fim de uma linha na string. 7 2016-I Observações Existem outras codificações ASCII é a principal e mais utilizada pela sua economia de memória (1 byte) C e C++ usam o padrão de 1 byte para o tipo char Java usa o padrão de 2 bytes para o tipo char 8 2016-I Representação Strings C e C++ tratam strings como arrays de caracteres finalizados com o caractere “nulo” (elemento 0 na tabela ASCII) Se o elemento nulo não for explicitado colocase outros caracteres não-imprimíveis Cuidado com o tamanho da String que deve garantidamente ter espaço para o caractere nulo Vantagem: Acesso direto a um caractere da string 9 2016-I Representação Strings Uma outra possibilidade é usar a primeira posição da string para armazenar o tamanho, sem precisar assim do caracter nulo. Se for usar frequentemente a inserção/eliminação de substrings, o uso de lista encadeada pode ser viável 10 2016-I Exemplo Corporate name changes are occurring with ever greater frequency, as companies merge, buy each other out, try to hide from bad publicity, or even raise their stock price – remember when adding a .com to a company’s name was the secret to success! These changes make it difficult to figure out the current name of a company when reading old documents. Your company, Digiscam (formerly Algorist Technologies), has put you to work on a program which maintains a database of corporate name changes and does the appropriate substitutions to bring old documents up to date. Your program should take as input a file with a given number of corporate name changes, followed by a given number of lines of text for you to correct. Only exact matches of the string should be replaced. There will be at most 100 corporate changes, and each line of text is at most 1,000 characters long. A sample input is — 11 2016-I Exemplo 4 "Anderson Consulting" to "Accenture" "Enron" to "Dynegy" "DEC" to "Compaq" "TWA" to "American" 5 Anderson Accounting begat Anderson Consulting, which offered advice to Enron before it DECLARED bankruptcy, which made Anderson Consulting quite happy it changed its name in the first place! Which should be transformed to — Anderson Accounting begat Accenture, which offered advice to Dynegy before it CompaqLARED bankruptcy, which made Anderson Consulting quite happy it changed its name in the first place! 12 2016-I Exemplo 13 2016-I Exemplo 14 2016-I Exemplo 15 2016-I C++ Funções string::size() /* string length */ string::empty() /* is it empty */ string::c_str() /* return a pointer to a C style string */ string::operator [](size_type i) /* access the ith character */ string::append(s) /* append to string */ string::erase(n,m) /* delete a run of characters */ string::insert(size_type n, const string&s) /* insert string s at n */ string::find(s) string::rfind(s) /* search left or right for the given string */ string::first() string::last() /* get characters, also there are iterators */ 16 2016-I Exercícios • WERTYU • Common Permutation • Where’s Waldorf ? • Crypt Kicker II • Doublets 17 2016-I Strings COM11087-Tópicos Especiais em Programação I [email protected] 2016-I