24/03/2015 Desafios de Programação TCC-00.254 | Turma A-1 Conteúdo Manipulação de Strings Professor Leandro Augusto Frata Fernandes [email protected] Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2015.1/tcc-00.254 Leitura Sugerida • • • Competitive Programming 2 HALIM, S.; HALIM, F. Lulu: 2012 Capítulo 6 Competitive Programming 3 HALIM, S.; HALIM, F. Lulu: 2013 Capítulo 6 Programming Challenges SKIENA, S.S.; REVILÇA, M.A. Springer: 2003 Capítulo 3 TCC-00.254 Desafios de Programação 2 1 24/03/2015 Codificação de Caracteres • Mapeamento entre números e símbolos que fazem parte de um alfabeto particular • Exemplos de codificações ASCII Focar neste o 2 = 128 caracteres, 8 bits Tipo primitivo char em C/C++ UTF-8 o 2 = 256 caracteres, 8 bits UNICODE o2 = 65.536 caracteres, 16 bits Tipo primitivo char em Java TCC-00.254 Desafios de Programação 3 Representação de Strings • Opções Arrays terminados por caractere nulo (‘\0’) o char[] em C/C++ Arrays associados ao tamanho do string o java.lang.String em Java, std::string em C++ Lista encadeada de caracteres Árvore de prefixos (trie) para várias strings • Impactos a serem considerados Uma trie para as entradas "A", "to", "tea", "ted", "ten", "i", "in" e "inn" (Fonte: Wikipedia) Uso e organização de memória Consulta de tamanho Tempo de acesso constante ao -ésimo caractere Acesso eficiente a um -ésimo caractere existente Exclusão e inclusão eficiente de caracteres TCC-00.254 Desafios de Programação 4 2 24/03/2015 Operações Comuns • • • • Consulta de tamanho Cópia Reversão Busca por padrão Dado um string A, identificar quando este contém o substring B Como fazer? Como lidar com sensibilidade ao caso? • • Conversão de/para tipos numéricos Expressões regulares Java leva vantagem! TCC-00.254 Desafios de Programação 5 Bibliotecas Nativas C (char[]) • C++ • Header <string.h> strlen std::string size, empty strcpy c_str strcat operator [] strcmp append, insert, replace strchr, strstr erase sscanf, sprintf • find, rfind Header <stdlib.h> first, last atof, atoi, strtod, etc. • compare Header <ctype.h> tolower, toupper, islower, isupper, isalpha, etc. • std::stringstream TCC-00.254 Desafios de Programação 6 3 24/03/2015 Bibliotecas Nativas Java • java.lang.String • java.lang.Double e outras length, isEmpty toString(int i) charAt parseDbl(String s) concat, replace, reclaceAll • compareTo, compareToIgnoreCase trim toUpperCase, toLowerCase valueOf java.lang.Integer toString(int i, int radix) parseInt(String s, int radix) • java.lang.StringBuilder • java.io.StringReader • Pacote java.util.regex TCC-00.254 Desafios de Programação 7 4