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.

Slides:



Advertisements
Apresentações semelhantes
TRATAMENTO DE ARQUIVOS EM C
Advertisements

Programação II Estruturas de Dados
ICC – Matrizes Jorge Macêdo.
Prof. Luis Otavio Alvares
Introdução à Linguagem C
Programação II Funções especiais Ricardo de Sousa Britto
UDESC - Prof. Juliano Maia
Universidade Federal do Espírito Santo Programação II Vetores Professora: Norminda Luiza.
Linguagem C Strings.
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Linguagem C Strings.
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
O Portal do Estudante de Computação
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
Ameliara Freire O comando de entrada de dados é utilizado quando desejamos fornecer um valor para um nosso programa. Os dispositivos.
PROGRAMAÇÃO ESTRUTURADA II
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.
DAVID ANDERSON CARDOSO DANTAS
Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero
Computação Eletrônica
Vetores Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e.
Aula 10 - Armazenamento de Dados em Registros
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Arquivo.
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
Aula Prática 4 Monitoria IP/CC (~if669).
Estruturas de Dados Aula 6: Cadeias de Caracteres
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Programação de Computadores I – Arquivos
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
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.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Programação Computacional Aula 9: Meu primeiro programa em C
Aula prática 7 Strings Monitoria de Introdução à Programação.
Algoritmo e Estrutura de Dados I Aulas 12 – Linguagem C Strings Márcia Marra
Profa. Maria Augusta Constante Puget
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
Estruturas Homogêneas – Vetores e Matrizes
Linguaguem de Programação II
Profa. Maria Augusta Constante Puget
Aula prática 7 Strings Monitoria de Introdução à Programação.
Linguagem de Programação
Programação em C Aula 9.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
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.
ponteiros Estrutura de Dados Prof. André Cypriano M. Costa
Programação de Computadores I – Arquivos Profa. Mercedes Gonzales Márquez.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Slides C – Número 4 Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “vetores de números e de caracteres”
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)
Estruturas Homogêneas - Vetores
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Aula 5 Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI.
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”. 1.
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.
Transcrição da apresentação:

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 de cadastro de pessoas em cartórios precisam ler o nome das pessoas. Para realizar cadastros na internet precisamos digitar o , nome, sobrenome, etc. Para postar no facebook precisar digitar o texto. etc.

3 Nós sabemos representar letras* usando o tipo char. char letra1 = ‘o’; char letra2 = ‘l’; char letra3 = ‘a’; * Entenda letras como símbolos alfabéticos, numéricos, pontuações e demais caracteres especiais (tabulação, nova linha, etc.).

4 Nós sabemos representar letras usando o tipo char. char letra1 = ‘o’; char letra2 = ‘l’; char letra3 = ‘a’; Nós também sabemos como representar conjuntos de itens do mesmo tipo usando vetores. int vetor[3]; vetor[0] = 2; vetor[1] = 7; vetor[2] = 9;

Mas textos nada mais são que conjuntos de letras! 5 “Oi, galera!” ‘O’‘i’‘,’‘ ‘g’‘a’‘l’‘e’‘r’‘a’‘!’

Mas textos nada mais são que conjuntos de letras! 6 “Oi, galera!” ‘O’‘i’‘,’‘ ‘g’‘a’‘l’‘e’‘r’‘a’‘!’ Então que tal representar textos como vetores de caracteres?

#include int main (void) { char palavra[4]; palavra[0] = ‘o’; palavra[1] = ‘l’; palavra[2] = ‘a’; palavra[3] = ‘\0’; return 0; }

#include int main (void) { char palavra[4]; palavra[0] = ‘o’; palavra[1] = ‘l’; palavra[2] = ‘a’; palavra[3] = ‘\0’; return 0; } O símbolo ‘\0’ é usado para indicar o final dos textos. Lembre-se de guardar espaço para ele.

#include int main (void) { char palavra[10]; palavra[0] = ‘o’; palavra[1] = ‘l’; palavra[2] = ‘a’; palavra[3] = ‘\0’; return 0; } O símbolo ‘\0’ é usado para indicar o final dos textos. Lembre-se de guardar espaço para ele. Com o ‘\0’ podemos ter textos mais curtos que os espaço reservado. Isso vai ser importante quando não soubermos o tamanho dos textos a priori. Exemplo: quando formos ler textos do teclado ‘o’‘l’‘a’‘\0’------

#include int main (void) { char palavra[10]; palavra[0] = ‘o’; palavra[1] = ‘l’; palavra[2] = ‘a’; palavra[3] = ‘\0’; printf(“%s”, palavra); return 0; } Para ler e escrever strings (termo técnico para sequência da caracteres) usando o símbolo de formatação %s. O programa mostrará letras na tela até encontrar um caractere de ‘\0’.

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } Como ler strings?

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } Atenção com o scanf ao ler strings! Não devemos usar o &!! Por quê? Vocês se lembram que usamos o “&” porque o scanf espera como parâmetro a posição na memória onde vamos guardar a informação? Strings são vetores e as variáveis associadas a vetores são ponteiros!

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } Atenção com o scanf ao ler strings! Não devemos usar o &!! PosiçãoNomeValor 790 Área Reservada para palavra palavra790 Quando escrevemos palavra aqui já estamos dizendo o ponteiro de onde queremos salvar as informações!

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 Área reservada pala palavra palavra790

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 Área reservada pala palavra palavra790 Nome:

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 Área reservada pala palavra palavra790 Nome: Filipe _

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 Área reservada pala palavra ‘F’ 791‘i’ 792‘l’ 793‘i’ 794‘p’ 795‘e’ 796‘\0’ palavra790 Nome: Filipe _

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 Área reservada pala palavra ‘F’ 791‘i’ 792‘l’ 793‘i’ 794‘p’ 795‘e’ 796‘\0’ palavra790 Nome: Filipe _ ‘\0’ é colocado automaticament e pelo scanf!

#include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } O que aconteceria se o nome da pessoa fosse Alexandrino? 11 letras

#include int main (void) { char palavra[30]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } O que aconteceria se o nome da pessoa fosse Alexandrino? Sempre crie um vetor com espaço suficiente para o tipo de dado que estamos lendo. E coloque um folga para surpresas.

#include int main (void) { char palavra[30]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } O que aconteceria se o nome da pessoa fosse Alexandrino? Sempre crie um vetor com espaço suficiente para o tipo de dado que estamos lendo. E coloque um folga para surpresas. Existem formas de ler uma quantidade máxima de letras por segurança e, de fato, essa seria a melhor solução, mas vamos deixar essa solução para cursos mais avançados.

#include int main (void) { char palavra[30]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } E se quiséssemos ler o nome completo? Funcionaria?

#include int main (void) { char palavra[30]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } E se quiséssemos ler o nome completo? Funcionaria? Não! O scanf só lê uma palavra por vez. Isto é, ele lê letras até que encontre o primeiro espaço.

#include int main (void) { char nome[30]; char sobrenome[300]; printf(“Primeiro nome: ”); scanf(“%s”, nome); printf(“Sobrenome: ”); scanf(“%s”, sobrenome); return 0; } Solução 1: Usar uma variável para o nome e outra para o sobrenome.

#include int main (void) { char nome[30]; char sobrenome[300]; printf(“Primeiro nome: ”); scanf(“%s”, nome); printf(“Sobrenome: ”); scanf(“%s”, sobrenome); return 0; } Solução 1: Usar uma variável para o nome e outra para o sobrenome. Problema: E se a pessoa tiver mais de 2 nomes?

#include int main (void) { char nome_completo[1024]; printf(“Nome Completo: ”); scanf(“%[^\n]”, nome_completo); return 0; } Solução 2: Ler até encontrar um caractere de saltar linha.

#include int main (void) { char nome1[1024]; char nome2[1024]; printf(“Nome Completo: ”); scanf(“%[^\n]”, nome1); printf(“Nome Completo: ”); scanf(“\n%[^\n]”, nome2); return 0; } Solução 2: Ler até encontrar um caractere de saltar linha. Atenção!

#include int main (void) { char nome_completo[1024]; printf("nome completo: "); scanf("%[^\n]", nome_completo); printf("seu nome eh: %s\n", nome_completo); return 0; }

A biblioteca string.h Textos são tão importantes que possuem uma biblioteca de funções dedicadas ao seu processamento. 31 #include int main (void) {... return 0; }

strlen: o tamanho de uma string 32 #include int main (void) { char nome[10] = "filipe"; int numero_letras = strlen(nome); printf("%s tem %d letras\n", nome, numero_letras); return 0; } outra forma de inicializar strings

strcat: adiciona um texto ao final de uma string 33 #include int main (void) { char nome[50] = ""; strcat(nome, "filipe "); strcat(nome, "wall "); strcat(nome, "mutz "); printf("Nome: %s\n", nome); return 0; }

strcat: adiciona um texto ao final de uma string 34 #include int main (void) { char nome[50] = “filipe"; char texto[50] = “”; strcat(texto, “Sr. "); strcat(texto, nome); strcat(texto, “, bem vindo!"); printf("%s\n", texto); return 0; }

strcpy: copia o texto de uma string para outra 35 #include int main (void) { char nome[10] = “filipe"; char texto[50] = “”; strcpy(texto, nome); strcat(texto, “, bem vindo”); printf("%s\n", texto); return 0; }

Atenção! Não use o operador de ‘=‘ para tentar copiar strings! Você só estará copiando o ponteiro! SEMPRE USE O STRCPY! 36

strcmp: comparando duas strings 37 #include int main (void) { char p1[10] = “lucas"; char p2[50] = “alberto”; if (strcmp(p1, p2) < 0) printf(“%s vem primeiro\n”, p1); else printf(“%s vem primeiro\n”, p2); return 0; } strcmp recebe como entrada duas strings. Se a primeira vier antes da segunda alfabeticamente, é retornado um número negativo. Se as strings são iguais, ela retorna 0. Se a segunda vier antes da primeira, a função retorna um número positivo.

#include typedef struct { int dia, mes, ano; } Data; typedef struct { int registro; Data data_nascimento; char nome[32]; } Pessoa ;

Pessoa le_pessoa() { Pessoa p; printf("Ditite seu numero de registro: "); scanf("%d", &p.registro); printf("Digite seu nome: "); scanf("\n%[^\n]", p.nome); printf("Digite sua data de nascimento (dia/mes/ano): "); scanf("%d/%d/%d", &p.data_nascimento.dia, &p.data_nascimento.mes, &p.data_nascimento.ano); return p; }

int main(void) { printf("Cadastro da pessoa 1\n"); Pessoa p = le_pessoa(); printf("Sr(a). %s, cadastro realizado com sucesso!\n", p.nome); printf("\n"); printf("Cadastro da pessoa 2\n"); Pessoa q = le_pessoa(); printf("Sr(a). %s, cadastro realizado com sucesso!\n", q.nome); return (0); }

Exemplos 1.Implemente a função strlen 2.Leia uma palavra e mostre-a de traz para frente. 3.Deseja-se fazer um programa que mostra na tela o nome do aluno com maior nota da turma e sua nota final (a nota final é dada pela média das notas de 3 avaliações). Para isso, você deve ler repetidamente o nome e as 3 notas de vários alunos até que seja um digitado um nome com 2 letras ou menos. Em seguida, você deve mostrar na tela o nome do aluno com maior nota e sua nota final. 42