Estruturas de Dados Aula 6: Cadeias de Caracteres

Slides:



Advertisements
Apresentações semelhantes
Laboratório de Programação
Advertisements

Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Um programa em C Bibliotecas Variáveis globais
Manipulação de Strings Marco Reis. Novo arquivo Adicione ManipulacaoDeStrings.c ao projeto. Cada projeto pode ter apenas um método main. Como outros programas.
Programação II Estruturas de Dados
Programação para Engenharia I
Profª. Leticia Lopes Leite LAPRO A - FACIN
TADS – Tipos Abstratos de Dados
ICC – Matrizes Jorge Macêdo.
Introdução à Linguagem C
Programação II Funções especiais Ricardo de Sousa Britto
LPG - I: Alocação Dinâmica de Memória - Ponteiros
UDESC - Prof. Juliano Maia
LPG – I Prof. Flavio Marcello
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo Programação II Vetores Professora: Norminda Luiza.
Linguagem C Strings.
Vetores, Matrizes e Funções
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Slides: Prof. João Fabro UTFPR - Curitiba
Linguagem C Strings.
Matrizes e Funções - Continuação
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Revisão da Linguagem C.
Strings Definição: Não confundir caracteres com strings
O Portal do Estudante de Computação
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
O Portal do Estudante de Computação
Vetores em c / c++: Formato geral para declaração de variáveis:
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 7 Strings Monitoria de Introdução à Programação
Linguagem de Programação II Parte VII
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Seminário 1: Revisão de C
Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero
Computação Eletrônica
Estruturas de Dados Aula 9: Listas (parte 1)
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula prática 7 Strings Monitoria de Introdução à Programação
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Programação de Computadores I – Arquivos
1 Introdução à Linguagem C Strings Deise Saccol Adaptado de slides das Profas. Patrícia Jaques e Mônica Py.
 2000 Prentice Hall, Inc. All rights reserved. 1 Capítulo 8 - Caracteres e Strings Sumário 8.1Introdução 8.2Conceitos Fundamentais de Strings e Caracteres.
1 Introdução à Linguagem C Strings Deise Saccol Adaptado de slides das Profas. Patrícia Jaques e Mônica Py.
Algoritmo e Estrutura de Dados I Aulas 12 – Linguagem C Strings Márcia Marra
Profa. Maria Augusta Constante Puget
Linguaguem de Programação II
Estruturas Homogêneas – Vetores e Matrizes
Profa. Maria Augusta Constante Puget
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Aula prática 7 Strings Monitoria de Introdução à Programação.
Linguagem de Programação
PCI- Vetores Profa. Mercedes Gonzales Márquez. Aula 5 - VetoresAlgoritmos e Estruturas de Dados I Sequência de valores todos do mesmo tipo Nome único.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
Clique para editar o título Linguagem C Para programadores Python PMR
Estruturas Homogêneas - Vetores
1 Aula 07 Strings Prof. Filipe Mutz. 2 Em nossos programas ainda não vimos como armazenar palavras e textos, e eles são muito importantes! Exemplos: Programas.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C” 1.
Aula 5 Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI.
Aula Prática 7 STRINGS Monitoria  Um dos tipos de arranjos que mais ocorre em C é o arranjo de caracteres, ou string. C não suporta um tipo básico.
Fundamentos de Programação 1
Fundamentos de Programação 1
Transcrição da apresentação:

Estruturas de Dados Aula 6: Cadeias de Caracteres 16/04/2014 1

Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro “pequeno”) 1 byte (8 bits) 256 caracteres possíveis Códigos são associados em uma tabela de códigos Por exemplo, ASCII

Tabela ASCII

Tabela ASCII de caracteres de controle

Caracteres em C char c = 97; printf (“%d %c\n”, c, c); printf imprime o conteúdo de c em dois formatos diferentes: %d : imprime o valor do código numérico (97) %c : imprime o caracter associado ao código na tabela (‘a’)

Caracteres em C Devemos evitar o uso explícito dos códigos Muda de acordo com a arquitetura usada Em C, usamos “constantes de caractere” Constantes de caractere Caractere com aspas simples char c = ‘a’; printf (“%d %c\n”, c, c);

Caracteres em C Os dígitos são codificados sequencialmente na tabela ASCII ‘0’ (48), ‘1’ (49), etc... O código a seguir verifica se um caracter é um dígito (de 0 a 9) int digito (char c) { if ((c>=‘0’) && (c<=‘9’)) return 1; else return 0; }

Caracteres em C Função de sistema: NAME isdigit - test for a decimal digit SYNOPSIS #include <ctype.h> int isdigit(int c);

Caracteres em C Para converter de letra minúscula para maiúscula (usando codificação sequencial) char maiuscula (char c) { if (c>=‘a’ && c<=‘z’) c = c – ‘a’ + ‘A’; return c; }

Funções de <ctype.h> int isalnum(int); int isalpha(int); int isblank(int); int iscntrl(int); int isdigit(int); int isgraph(int); int islower(int); int isprint(int); int ispunct(int); int isspace(int); int isupper(int); int isxdigit(int); int tolower(int); int toupper(int);

Cadeias de Caracteres (strings) Representação de cadeias de caracteres Vetor do tipo char, terminando com o caractere nulo ‘\0’ printf com especificador %s Imprime caracteres de um vetor até encontrar o ‘\0’ int main (void) { char str[4]; str[0] = ‘O’; str[1] = ‘l’; str[2] = ‘a’; str[3] = ‘\0’; printf (“%s \n”, str); }

Cadeias de Caracteres int main (void) { char str [] = “Ola”; printf (“%s \n”, str); } char str [] = {‘O’, ‘l’, ‘a’, ‘\0’};

Leitura de caracteres e cadeias de caracteres Usando scanf Com especificação do formato char a; ... scanf (“%c”, &a);

Leitura de caracteres e cadeias de caracteres Para pular caracteres em branco char a; ... scanf (“ %c”, &a);

Leitura de caracteres e cadeias de caracteres %s pula caracteres em branco Cidades com nomes duplos não seriam capturadas corretamente char str[81]; ... scanf (“%s”, str);

Leitura de caracteres e cadeias de caracteres Para capturar nomes compostos: %[...] Entre colchetes especificamos os caracteres que serão aceitos na leitura Se [^...], tem-se o efeito inverso, i.e., os elementos especificados não são lidos Espaço antes do % garante que espaços em branco antes do nome sejam descartados char str[81]; ... scanf (“ %[^\n]”, str);

Leitura de caracteres e cadeias de caracteres Para garantir que o tamanho é suficiente Especifique o número máximo de caracteres lidos char str[81]; ... scanf (“ %80[^\n]”, str);

Exemplos de funções Função que calcula comprimento de uma cadeia de caracteres int comprimento (char* s) { int i; int n=0; for (i=0; s[i] != ‘\0’; i++) n++; return n; } Função análoga da biblioteca padrão (string.h): strlen

Exemplos de funções Função que copia os elementos de uma cadeia de caracteres para outra void copia (char* destino, char* origem) { int i; for (i=0; origem[i] != ‘\0’; i++) destino[i] = origem[i]; destino[i] = ‘\0’; } Função análoga da biblioteca padrão (string.h): strcpy

Exemplos de funções Função que concatena uma cadeia de caracteres a outra void concatena (char* dest, char* orig) { int i = 0; // índice destino int j; // índice origem while (dest[i] != ‘\0’) // acha o final da cadeia destino i++; for (j=0; orig[j] != ‘\0’; j++) dest[i] = orig[j]; } dest[i] = ‘\0’; Função análoga da biblioteca padrão (string.h): strcat

Exemplos de funções Função que compara duas cadeias de caracteres, caractere a caractere Usamos os códigos dos caracteres para determinar precedência Retorno: Se s1 preceder s2 -> -1 Se s2 preceder s1 -> 1 Função análoga da biblioteca padrão (string.h): strcmp

Exemplos de funções int compara (char* s1, char* s2) { int i; for (i=0; s1[i] != ‘\0’ && s2[i] != ‘\0’; i++) { if (s1[i] < s2[i]) return -1; else (s1[i] > s2[i]) return 1; } if (s1[i] == s2[i]) //strings iguais return 0; else if (s2[i] != ‘\0’) //s1 é menor, pois tem menos caracteres else return 1; // s2 é menor, pois tem menos caracteres

Exemplos de funções Exemplo com alocação dinâmica #include <stdlib.h> #include <string.h> char* duplica (char* s) { int n = strlen(s); char* d = (char*) malloc ((n+1)*sizeof(char)); strcpy (d, s); return d; }

Vetor de cadeias de caracteres Conjunto bidimensional do tipo char Por exemplo: Número máximo de alunos em uma turma é 50 Cada nome terá no máximo 80 caracteres char alunos [50][81] alunos[i] acessa (i+1)-ésimo aluno da turma alunos[i][j] acessa (j+1) –ésima letra do nome do (i+1)- ésimo aluno void imprime (int n, char alunos[][81]) { int i; for (i=0; i<n; i++) printf (“%s\n”, alunos[i]); }

Vetor de cadeias de caracteres Com alocação dinâmica Declara-se um vetor de ponteiros Aloca-se dinamicamente cada elemento #define MAX 50 char* alunos[MAX]; char* lelinha (void) { char linha [121]; printf (“Digite um nome: “); scanf (“ %120[^\n]”, linha); return duplica (linha); }

Vetor de cadeias de caracteres int lenomes (char** alunos) { int i; int n; do { printf (“Digite o numero de alunos: “); scanf (“%d”, &n); } while (n>MAX); for (i=0; i<n; i++) alunos[i] = lelinha(); return n; }

Vetor de cadeias de caracteres Função para liberar os nomes alocados void liberanomes (int n, char** alunos) { int i; for (i=0; i<n; i++) free(alunos[i]); } Função que imprime os nomes dos alunos void imprimenomes (int n, char** alunos) printf (“%s\n”, alunos[i];

Vetor de cadeias de caracteres Programa que faz uso das funções anteriores #define MAX 50 int main (void) { char* alunos[MAX]; int n = lenomes(alunos); imprimenomes(n, alunos); liberanomes(n, alunos); return 0; }

Parâmetros da função main Zero parâmetros Dois parâmetros (argc e argv) argc Número de argumentos passados para o main argv Vetor de cadeias de caracteres com os nomes passados como argumento int main (int argc, char** argv) { ... }

Parâmetros da função main Considere um programa executável mensagem > mensagem estruturas de dados argc receberá o valor 4 argv será inicializado com argv[0] = “mensagem” argv[1] = “estruturas” argv[2] = “de” argv[3] = “dados”

Parâmetros da função main #include <stdio.h> int main (int argc, char** argv) { int i; for (i=0; i<argc; i++) printf (“%s\n”, argv[i]); return 0; } Qual será a saída desse programa?