Estruturas de Dados Aula 6: Cadeias de Caracteres

Documentos relacionados
Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Módulo 7 Cadeias de Caracteres

Tabela ASCII de caracteres de controle

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

Caracteres e Cadeias de Caracteres

Cadeias de Caracteres (Strings)

6. Cadeia de caracteres

Métodos Computacionais. Strings (Vetor de Caracteres)

Caracteres. Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência entre caracteres e códigos numéricos

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Introdução a Programação. Strings (Vetor de Caracteres)

3 Cadeias de Caracteres

cadeia de caracteres (string) INF Programação I Prof. Roberto Azevedo

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2

INF 1005 Programação I

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Vetores II. Strings Leitura e exibição Biblioteca string.h Operações com Strings. Matrizes Definição de Acesso Operações com Matrizes

Referências. Programação de Computadores II. Cap. 7 Cadeias de Caracteres. Caracteres. Tópicos

Tratamento de Caracteres

Char e Strings de Caracteres

Char e Strings de Caracteres

Vetores e Strings. 4. Funções Básicas para manipulação de Strings. A função gets() lê uma string do teclado. Sua forma geral é:

Linguagem C Parte 4 - Extra

Computação Eletrônica. Strings. Prof: Luciano Barbosa. CIn.ufpe.br

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

Aula 9 Oficina de Programação Strings. Profa. Elaine Faria UFU

INF 1007 Programação II

INF 1620 P1-16/09/06 Questão 1 Nome:

Linguagem de Programação I Vetores e Strings. Thiago Leite Francisco Barretto

Strings. Introdução. Definição de strings. Criação/Declaração de strings. Inicialização de strings. Manipulação de strings. Exemplos.

INF 1620 P2-14/10/05 Questão 1 Nome:

1 Exercícios com ponteiros

O que é um apontador em C (type pointer in C)?

Aula 8 - Matrizes e Strings

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Vetores II Strings Leitura e exibição Biblioteca string.h Operações com Strings Matrizes Definição de Acesso Operações com Matrizes

Ponteiros e Tabelas. K&R: Capítulo 5

3. Linguagem de Programação C

INF 1620 P1-04/10/03 Questão 1 Nome:

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Computação 2. Aula 3. Diego Addan Vetores de caracteres (strings)

INF 1620 P1-14/04/07 Questão 1 Nome:

1 Exercícios com ponteiros

Programação de Computadores II

INF 1620 P1-18/09/04 Questão 1 Nome:

CCO 016 Fundamentos de Programação

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Apêndice B. Cadeias de Caracteres (Strings)

INF 1620 P1-11/04/08 Questão 1 Nome:

MC-102 Aula 11 Strings

CURSO BÁSICO DE PROGRAMAÇÃO AULA 11. Revisão Aula Anterior Vetores Cadeia de Caracteres

Aula 05 -Introdução àlinguagc Programação: Estr. Dados Strings

Linguagem C: Tipos básicos de dados escalares e cadeia de caracteres. Prof. Leonardo Barreto Campos 1

CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DISCIPLINA : INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO ASSUNTO: C

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

INF 1620 P1-17/09/05 Questão 1 Nome:

INF 1620 P4 30/06/07 Questão 1 Nome:

Métodos Computacionais em Física

Introdução à Programação C

Vetores. Vetores. Vetores. Vetores. Vetores. Algoritmos e Lógica de Programação. Vetores

SSC304 Introdução à Programação Para Engenharias. Manipulação de Strings. GE4 Bio

Introdução a Programação de Jogos

Programação II. Strings (Cadeias de Caracteres) Bruno Feijó Dept. de Informática, PUC-Rio

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

a) Implemente uma função que retorne uma aproximação do valor de π, de acordo com a F órmula de Leibniz: ( 1)

Curso Básico de Programação Aula 11. Revisão Aula Anterior Laços de Repetição While; Do-While; For.

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

Ponteiros. Introdução

Ponteiros. Baseado nos slides do Prof. Mauro.

INF 1620 P4-01/07/08 Questão 1 Nome:

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Aula 15: Vetores e Matrizes em C

Ponteiros. Introdução e Alocação Dinâmica

Estrutura de Dados. Cadeia de Caracteres. Roberto Araujo Ago/2013

prim = A ; prim = &A[0];

INF 1620 P4 11/12/06 Questão 1 Nome:

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

ESTRUTURAS COMPOSTAS

Computação Informática

Disciplina de Algoritmos e Programação

Programação II. Strings (Cadeias de Caracteres) Bruno Feijó Dept. de Informática, PUC-Rio

Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva

ESTRUTURAS COMPOSTAS VETOR

Índice Valor C A D E I A \0 memória

Computação 2. Aula 5. Profª. Fabiany defines vetor, strings e matriz por parâmetros de função

Introdução à Programação. Strings

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Vetores e Strings. printf ("\na string %s nao esta contida no vetor de %s", string, "strings.\n");

INF 1620 P2-01/11/03 Questão 1 Nome:

Programação I Matrizes e Strings. Prof. Carlos Alberto

LISTA DE EXERCÍCIOS MÊS 03

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

EPs 1 e 2. EP2: veja. EP1: veja

Aula 26: Arquivos de texto

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P1 17/04/2010

Básico: estrutura de programa, sintaxe Interface com linha de comando

INF 1620 P1-11/04/03 Questão 1 Nome:

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Transcrição:

Estruturas de Dados Aula 6: Cadeias de Caracteres 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 1

Tabela ASCII Tabela ASCII de caracteres de controle 2

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); 3

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 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; 4

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); int main (void) char str [] = O, l, a, \0 ; printf ( %s \n, str); 5

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); 6

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); 7

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 n=0; for (i=0; s[i]!= \0 ; i++) n++; return n; Função análoga da biblioteca padrão (string.h): strlen 8

Exemplos de funções Função que copia os elementos de uma cadeia de caracteres para outra void copia (char* destino, char* origem) 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]; i++; dest[i] = \0 ; Função análoga da biblioteca padrão (string.h): strcat 9

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) 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 return -1; else return 1; // s2 é menor, pois tem menos caracteres 10

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]) for (i=0; i<n; i++) printf ( %s\n, alunos[i]); 11

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 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; 12

Vetor de cadeias de caracteres Função para liberar os nomes alocados void liberanomes (int n, char** alunos) for (i=0; i<n; i++) free(alunos[i]); Função que imprime os nomes dos alunos void imprimenomes (int n, char** alunos) for (i=0; i<n; i++) 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; 13

Parâmetros da função main 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[2] = dados 14

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