Vetores, Matrizes e Strings em C Parte 3
-
Author
elaine-cecilia-gatto -
Category
Education
-
view
11.880 -
download
5
Embed Size (px)
description
Transcript of 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

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;

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

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?

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.

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.

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;

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;

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

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

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;

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

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

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

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;

Função STRCMP()

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;

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

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

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

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.

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!