Vetores, Matrizes e Strings em C Parte 3

22
Programação de Computadores Aula 4 e 5 23 e 30/08/2012 Profª Ms. Engª Elaine Cecília Gatto Unidade 4: Vetores, Matrizes e Strings Curso de Bacharelado em Engenharia de Computação Universidade do Sagrado Coração – USC Bauru/SP

description

Vetores, Matrizes e Strings em C Parte 3

Transcript of Vetores, Matrizes e Strings em C Parte 3

Page 1: Vetores, Matrizes e Strings em C Parte 3

Programação de Computadores Aula 4 e 5

23 e 30/08/2012

Profª Ms. Engª Elaine Cecília Gatto

Unidade 4: Vetores, Matrizes e Strings

Curso de Bacharelado em Engenharia de Computação

Universidade do Sagrado Coração – USC

Bauru/SP

Page 2: Vetores, Matrizes e Strings em C Parte 3

STRINGS

• São sequências, conjuntos ou cadeira de caracteres diversos, sendo representados por aspas;

• Em C não existe um tipo STRING explícito;

• Não é um tipo primitivo da linguagem;

• Não existe uma palavra reservada que declare uma variável do tipo STRING (como acontece em pascal, java, etc);

• Em C utiliza-se um vetor ou matriz do tipo CHAR para armazenar uma STRING;

• Mas qual o tamanho da STRING? Quando ela termina?

• Utilizar um caracter terminador: \0 (null = zero) forma que as funções reconhecem o fim da string;

Page 3: Vetores, Matrizes e Strings em C Parte 3

Strings Constantes

• Sempre que o compilador encontra qualquer coisa entre aspas duplas, ele reconhece que se trata de uma string constante.

printf(“%s”, “Saudações”);

Posição da memória string

1092 S

1093 A

1094 U

1095 D

1096 A

1096 C

1097 O

1098 E

1099 S

1100 \ 0

Page 4: Vetores, Matrizes e Strings em C Parte 3

SCANF()

#include <stdio.h>

#include <stdlib.h>

int main(){

char nome[100];

printf("Digite o seu nome: ");

scanf("%s", nome);

printf("Saudacoes, %s", nome);

printf("\n ");

system("PAUSE");

return 0;

}

• Observe a saída do programa! Consegue notar o que há de diferente entre a entrada de dados e a saída?

Page 5: Vetores, Matrizes e Strings em C Parte 3

SCANF()

#include <stdio.h>

#include <stdlib.h>

int main(){

char nome[100];

printf("Digite o seu nome: ");

scanf("%s", nome);

printf("Saudacoes, %s", nome);

printf("\n ");

system("PAUSE");

return 0;

}

• Esta instrução lê cada caractere digitado e os armazena a partir do endereço nome.

• O processo termina quando um caractere branco é encontrado.

• Nesse ponto é incluído automaticamente o caractere \0 na próxima posição livre.

• Não é permitido ultrapassar o limite estipulado na criação do vetor/matriz.

• O espaço para \0 deve ser previsto. • A função scanf() entende um espaço em

branco como o término da entrada. • Por isso, na saída, apenas o primeiro

nome digitado é apresentado.

Page 6: Vetores, Matrizes e Strings em C Parte 3

SCANF()

#include <stdio.h>

#include <stdlib.h>

int main(){

char nome[100];

printf("Digite o seu nome: ");

scanf("%s", nome);

printf("Saudacoes, %s", nome);

printf("\n ");

system("PAUSE");

return 0;

}

• Mas se digitarmos o nome inteiro sem espaços, observe a saída!

• Observe esta instrução novamente. Porque está sendo usado nome e não &nome?

• Neste caso, nome é equivalente a &nome[0]

• O nome de uma matriz é o seu endereço inicial

• Scanf() é muito utilizada para ler uma mistura de tipos de dados numa mesma instrução.

Page 7: Vetores, Matrizes e Strings em C Parte 3

GETS() #include <stdio.h> #include <stdlib.h> int main(){ char nome[100]; printf("Digite o seu nome: "); gets(nome); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0; }

• Usada para leitura de textos ;

• Propósito: ler unicamente uma cadeia de caracteres do teclado enquano a tecla ENTER não for pressionada;

• Todos os caracteres digitados são armazenados, inclusive espaços e tabulações;

• O caractere \0 é incluído no final;

Page 8: Vetores, Matrizes e Strings em C Parte 3

GETS() #include <stdio.h> #include <stdlib.h> int main(){ char nome[100]; printf("Digite o seu nome: "); gets(nome); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0; }

• Problemas com esta função: pode armazenar caracteres além da capacidade definida;

Page 9: Vetores, Matrizes e Strings em C Parte 3

GETS() • Neste exemplo, é declarado

um vetor de tamanho 10, mas o nome digitado contém 20 caracteres. Observe que o vetor armazena 10 caracters a mais do que foi especificado.

• Para resolver este problema, deve-se usar FGETS()

#include <stdio.h>

#include <stdlib.h>

int main(){

char nome[10];

printf("Exemplo de estouro de string. \n");

printf("Digite o seu nome: ");

gets(nome);

printf("Saudacoes, %s", nome);

printf("\n ");

system("PAUSE");

return 0;

}

Page 10: Vetores, Matrizes e Strings em C Parte 3

FGETS() • O código ao lado utiliza fgets.

O vetor declarado tem 15 posições e somente essas 15 posições são preenchidas.

• Na saída, observa-se que o nome digitado é maior que as 15 posições, e portanto, o restante do nome é desprezado.

#include <stdio.h>

#include <stdlib.h>

int main(){

char nome[15];

printf("Digite o seu nome: ");

fgets(nome, 15, stdin);

printf("Saudacoes, %s", nome);

printf("\n ");

system("PAUSE");

return 0;

}

Page 11: Vetores, Matrizes e Strings em C Parte 3

PUTS() #include <stdio.h>

#include <stdlib.h>

int main(){

char nome[80];

printf("Digite o seu nome: ");

gets(nome);

puts("");

puts("Saudacoes, ");

puts(nome);

puts("");

puts("Imprimindo a partir da quarta posicao: ");

puts(&nome[4]);

puts("");

puts("a funcao puts() pula linha automaticamente!");

puts("");

system("PAUSE");

return 0;

}

• É o complemento da função gets();

• Propósito: imprimir uma única string por vez;

• O endereço da string deve ser enviado para putx como argumento;

Page 12: Vetores, Matrizes e Strings em C Parte 3

Inicializando strings

char nome[] = {‘E’, ‘l’, ‘a’, ‘i’, ‘n’, ‘e’, ‘\0’};

char nome[] = “Elaine”;

EXEMPLO:

#include <stdio.h>

#include <stdlib.h>

int main(){

char saudacao[]="Saudacoes, ";

char nome[80];

printf(" Digite o seu nome: ");

gets(nome);

printf("%s%s \n", saudacao, nome);

system("PAUSE");

return 0;

}

Page 13: Vetores, Matrizes e Strings em C Parte 3

Função STRCPY() • Copia ou atribui o conteúdo da

string de origem para a string de destino. Ambas devem ter, no mínimo, o mesmo tamanho;

• Sintaxe: strcpy(string_destino, string_origem);

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char nome_original[30] ; char nome_copia[30]; printf(" Digite um nome: "); gets(nome_original); strcpy(nome_copia, nome_original); printf(" Nome original: "); puts(nome_original); printf(" Nome copia: "); puts(nome_copia); system("PAUSE"); return 0; }

Page 14: Vetores, Matrizes e Strings em C Parte 3

Função STRCAT() • Concatena o conteúdo da string

de origem ao final do conteúdo da string de destino.

• Essa função não verifica se a primeira cadeia tem espaço suficiente para que a segunda cadeia seja adicionada ao seu final.

• Sintaxe: strcat(string_destino, string origem);

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(){

char cadeia1[100];

char cadeia2[10];

printf(" Digite o seu primeiro nome: ");

gets(cadeia1);

printf(" Digite o seu segundo nome: ");

gets(cadeia2);

strcat(cadeia1, cadeia2);

printf("%s", cadeia1);

puts("");

system("PAUSE");

return 0;

}

Page 15: Vetores, Matrizes e Strings em C Parte 3

Função STRCMP() #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char string1[20], string2[20]; int resultado; printf(" Digite uma palavra: "); gets(string1); printf(" Digite uma palavra: "); gets(string2); resultado = strcmp(string1, string2); if(resultado ==0 ){ puts("As strings sao iguais."); } else{ puts("As strings sao diferentes."); } system("PAUSE"); return 0; }

• Compara o conteúdo da string 1 com o conteúdo da string 2;

• Retorna um número inteiro; • Se forem iguais, a função

retorna zero; • Se o número retornado for

menor que zero, então a string1 é menor que a string 2;

• Se o número retornado for maior que zero, então a string1 é maior que a string2;

Page 16: Vetores, Matrizes e Strings em C Parte 3

Função STRCMP()

Page 17: Vetores, Matrizes e Strings em C Parte 3

Função STRLEN() #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char string1[20], string2[20]; int tamanho1, tamanho2; printf(" Digite uma palavra: "); gets(string1); printf(" Digite uma palavra: "); gets(string2); tamanho1 = strlen(string1); tamanho2 = strlen(string2); printf("O tamanho da string1 e: %d", tamanho1); puts(""); printf("O tamanho da string2 e: %d", tamanho2); puts(""); system("PAUSE"); return 0; }

• Recebe como argumento o endereço de uma string e retorna o seu tamanho;

• O comprimento do vetor/matriz da string deve ser um a mais que o inteiro retornado por strlen();

• O terminador \0 não é contabilizado;

Page 18: Vetores, Matrizes e Strings em C Parte 3

Função STRUPR()

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(){

char string[20];

printf(" \n Escreva uma palavra: ");

gets(string);

printf(" \n String original: %s", string);

strupr(string);

printf(" \n String convertida: %s", string);

printf("\n\n");

system("pause");

return 0;

}

• Converte o conteúdo da string em letras maiusculas

Page 19: Vetores, Matrizes e Strings em C Parte 3

Função STRLWR() #include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(){

char string[20];

printf(" \n Escreva uma palavra com todas as letras em maiusculo: ");

gets(string);

printf(" \n String original: %s", string);

strupr(string);

printf(" \n String convertida: %s", string);

printf("\n\n");

system("pause");

return 0;

}

• Converte o conteúdo da string em letras minusculos

Page 20: Vetores, Matrizes e Strings em C Parte 3

Exercícios

1. Desenvolver um programa que obtenha as seguintes informações para os “n” colegas da sua turma de Programação de Computadores:

• Realize as seguintes tarefas:

• Copie o nome do seu colega para uma variável denominada nome2;

• Concatene o sobrenome à variável nome2;

variavel qtde caracteres

nome 15

sobrenome 30

endereço 80

telefone 10

idade 3

Page 21: Vetores, Matrizes e Strings em C Parte 3

Exercícios

• Obtenha o tamanho da variável nome2;

• Imprima todas as informações de cada um dos seus colegas na tela;

2. Faça um programa em C que leia 10 strings, imprima o tamanho de cada uma delas e troque as letras para maiusculas. Dica: use o FOR.

3. Troque as letras do exercício anterior, por minusculas.

4. Escreva um programa em C que receba o nome, a idade e o sexo de 10 pessoas e armazene, em um vetor/matriz, as pessoas que forem do sexo masculino e maiores de 18 anos.

Page 22: Vetores, Matrizes e Strings em C Parte 3

Exercícios

5. Escreva um programa que faça a seguinte pergunta ao usuário: “Quem é o criador da Linguagem C?”. O usuário deve escrever a resposta e o programa deve verificar:

• Se o usuário responder corretamente, uma mensagem de “parabéns, voce acertou!”, deve ser emitida;

• Se o usuário responder incorretamente, uma mensagem de “que pena, voce errou!”, deve ser emitida.

6. Se você terminou todos os exercícios acima, então agora, termine os exercícios de matrizes e vetores das aulas passadas!