A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 1 Aula 07 Strings Prof. Filipe Mutz

2 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 e-mail, nome, sobrenome, etc. Para postar no facebook precisar digitar o texto. etc.

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

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

6 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?

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

8 #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.

9 #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. 0123456789 ‘o’‘l’‘a’‘\0’------

10 #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’.

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

12 #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!

13 #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... 800 801 802 810palavra790 Quando escrevemos palavra aqui já estamos dizendo o ponteiro de onde queremos salvar as informações!

14 #include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 791 792 793 794 795 796 797 798 799 800... 1085

15 #include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 Área reservada pala palavra 791 792 793 794 795 796 797 798 799 800... 1085palavra790

16 #include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 Área reservada pala palavra 791 792 793 794 795 796 797 798 799 800... 1085palavra790 Nome:

17 #include int main (void) { char palavra[10]; printf(“Nome: ”); scanf(“%s”, palavra); return 0; } PosiçãoNomeValor 790 Área reservada pala palavra 791 792 793 794 795 796 797 798 799 800... 1085palavra790 Nome: Filipe _

18 #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’ 797 798 799 800... 1085palavra790 Nome: Filipe _

19 #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’ 797 798 799 800... 1085palavra790 Nome: Filipe _ ‘\0’ é colocado automaticament e pelo scanf!

20 #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

21

22 #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.

23 #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.

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

25 #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.

26 #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.

27 #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?

28 #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.

29 #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!

30 #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; }

31 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; }

32 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

33 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; }

34 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; }

35 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; }

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

37 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.

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

39 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; }

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

41

42 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


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google