Vetores, Matrizes e Strings em C Parte 3

16,180 views

Published on

Vetores, Matrizes e Strings em C Parte 3

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
16,180
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
297
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Vetores, Matrizes e Strings em C Parte 3

  1. 1. Programação deComputadoresAula 4 e 523 e 30/08/2012Profª Ms. Engª Elaine Cecília GattoUnidade 4: Vetores, Matrizes e StringsCurso de Bacharelado em Engenharia de ComputaçãoUniversidade do Sagrado Coração – USCBauru/SP
  2. 2. 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;
  3. 3. Strings Constantes• Sempre que o compilador encontra qualquer coisa entre aspas duplas, ele reconhece que se trata de uma string constante. Posição da memória stringprintf(“%s”, “Saudações”); 1092 S 1093 A 1094 U 1095 D 1096 A 1096 C 1097 O 1098 E 1099 S 1100 0
  4. 4. SCANF()#include <stdio.h> • Observe a saída do#include <stdlib.h> programa! Consegue notar o que há deint main(){ diferente entre a entrada de dados e a char nome[100]; saída? printf("Digite o seu nome: "); scanf("%s", nome); printf("Saudacoes, %s", nome); printf("n "); system("PAUSE"); return 0;}
  5. 5. SCANF() • Esta instrução lê cada caractere digitado e os armazena a partir do endereço nome.#include <stdio.h> • O processo termina quando um#include <stdlib.h> caractere branco é encontrado. • Nesse ponto é incluído automaticamente o caractere 0 na próxima posição livre.int main(){ • Não é permitido ultrapassar o limite char nome[100]; estipulado na criação do vetor/matriz. • O espaço para 0 deve ser previsto. printf("Digite o seu nome: "); • A função scanf() entende um espaço em scanf("%s", nome); branco como o término da entrada. printf("Saudacoes, %s", nome); • Por isso, na saída, apenas o primeiro nome digitado é apresentado. printf("n "); system("PAUSE"); return 0;}
  6. 6. SCANF() • Mas se digitarmos o nome inteiro sem espaços, observe a saída! • Observe esta instrução novamente.#include <stdio.h> Porque está sendo usado nome e não#include <stdlib.h> &nome? • Neste caso, nome é equivalente a &nome[0]int main(){ • O nome de uma matriz é o seu endereço char nome[100]; inicial printf("Digite o seu nome: "); • Scanf() é muito utilizada para ler uma mistura de tipos de dados numa mesma scanf("%s", nome); instrução. printf("Saudacoes, %s", nome); printf("n "); system("PAUSE"); return 0;}
  7. 7. GETS() • Usada para leitura de#include <stdio.h> textos ;#include <stdlib.h> • Propósito: ler unicamente uma cadeia de caracteresint main(){ do teclado enquano a tecla char nome[100]; ENTER não for pressionada; printf("Digite o seu nome: "); • Todos os caracteres digitados são gets(nome); armazenados, inclusive printf("Saudacoes, %s", nome); espaços e tabulações; printf("n "); • O caractere 0 é incluído system("PAUSE"); no final; return 0;}
  8. 8. GETS()#include <stdio.h> • Problemas com esta#include <stdlib.h> função: pode armazenar caracteres além da capacidade definida;int main(){ char nome[100]; printf("Digite o seu nome: "); gets(nome); printf("Saudacoes, %s", nome); printf("n "); system("PAUSE"); return 0;}
  9. 9. GETS() • Neste exemplo, é declarado#include <stdio.h> um vetor de tamanho 10, mas#include <stdlib.h> o nome digitado contém 20int main(){ caracteres. Observe que o char nome[10]; vetor armazena 10 caracters a printf("Exemplo de estouro de string. n"); mais do que foi especificado. printf("Digite o seu nome: "); gets(nome); • Para resolver este problema, printf("Saudacoes, %s", nome); deve-se usar FGETS() printf("n "); system("PAUSE"); return 0;}
  10. 10. FGETS()#include <stdio.h> • O código ao lado utiliza fgets.#include <stdlib.h> O vetor declarado tem 15 posições e somente essas 15int main(){ posições são preenchidas. char nome[15]; • Na saída, observa-se que o printf("Digite o seu nome: "); nome digitado é maior que as fgets(nome, 15, stdin); 15 posições, e portanto, o restante do nome é printf("Saudacoes, %s", nome); desprezado. printf("n "); system("PAUSE"); return 0;}
  11. 11. PUTS()#include <stdio.h>#include <stdlib.h>int main(){ char nome[80]; printf("Digite o seu nome: "); gets(nome); puts(""); puts("Saudacoes, "); puts(nome); • É o complemento da função puts(""); gets(); puts("Imprimindo a partir da quarta posicao: "); puts(&nome[4]); • Propósito: imprimir uma puts(""); única string por vez; puts("a funcao puts() pula linha automaticamente!"); • O endereço da string deve ser puts(""); enviado para putx como system("PAUSE"); argumento; return 0;}
  12. 12. Inicializando stringschar 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;}
  13. 13. Função STRCPY() • Copia ou atribui o conteúdo da#include <stdio.h> string de origem para a string de#include <stdlib.h> destino. Ambas devem ter, no#include <string.h> mínimo, o mesmo tamanho;int main(){ • Sintaxe: strcpy(string_destino, char nome_original[30] ; string_origem); 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;}
  14. 14. Função STRCAT()#include <stdio.h> • Concatena o conteúdo da string#include <stdlib.h> de origem ao final do conteúdo#include <string.h> da string de destino. • Essa função não verifica se aint main(){ primeira cadeia tem espaço char cadeia1[100]; suficiente para que a segunda char cadeia2[10]; cadeia seja adicionada ao seu printf(" Digite o seu primeiro nome: "); final. gets(cadeia1); • Sintaxe: strcat(string_destino, printf(" Digite o seu segundo nome: "); string origem); gets(cadeia2); strcat(cadeia1, cadeia2); printf("%s", cadeia1); puts(""); system("PAUSE"); return 0;}
  15. 15. Função STRCMP()#include <stdio.h> • Compara o conteúdo da string#include <stdlib.h> 1 com o conteúdo da string 2;#include <string.h> • Retorna um número inteiro;int main(){ char string1[20], string2[20]; • Se forem iguais, a função int resultado; retorna zero; printf(" Digite uma palavra: "); gets(string1); • Se o número retornado for printf(" Digite uma palavra: "); menor que zero, então a gets(string2); string1 é menor que a string resultado = strcmp(string1, string2); if(resultado ==0 ){ 2; puts("As strings sao iguais."); • Se o número retornado for } else{ maior que zero, então a puts("As strings sao diferentes."); string1 é maior que a string2; } system("PAUSE"); return 0;}
  16. 16. Função STRCMP()
  17. 17. Função STRLEN()#include <stdio.h> • Recebe como argumento o#include <stdlib.h> endereço de uma string e#include <string.h> retorna o seu tamanho;int main(){ • O comprimento do char string1[20], string2[20]; vetor/matriz da string deve int tamanho1, tamanho2; ser um a mais que o inteiro printf(" Digite uma palavra: "); retornado por strlen(); gets(string1); • O terminador 0 não é printf(" Digite uma palavra: "); contabilizado; 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;}
  18. 18. Função STRUPR()#include <stdio.h> • Converte o conteúdo da string#include <stdlib.h> em letras maiusculas#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("nn"); system("pause"); return 0;}
  19. 19. Função STRLWR()#include <stdio.h> • Converte o conteúdo da string#include <stdlib.h> em letras minusculos#include <string.h>int main(){ char string[20]; printf(" n Escreva uma palavra com todasas letras em maiusculo: "); gets(string); printf(" n String original: %s", string); strupr(string); printf(" n String convertida: %s", string); printf("nn"); system("pause"); return 0;}
  20. 20. Exercícios1. Desenvolver um programa que obtenha as seguintes informações para os “n” colegas da sua turma de Programação de Computadores: variavel qtde caracteres nome 15 sobrenome 30 endereço 80 telefone 10 idade 3• Realize as seguintes tarefas:• Copie o nome do seu colega para uma variável denominada nome2;• Concatene o sobrenome à variável nome2;
  21. 21. 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.
  22. 22. Exercícios5. 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!

×