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.

                                    Posição da memória   string
printf(“%s”, “Saudações”);
                                          1092             S
                                          1093             A
                                          1094             U
                                          1095             D
                                          1096             A
                                          1096             C
                                          1097             O
                                          1098             E
                                          1099             S
                                          1100            0
SCANF()
#include <stdio.h>                 • Observe a saída do
#include <stdlib.h>                  programa! Consegue
                                     notar o que há de
int 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;
}
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;
}
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;
}
GETS()
                                   • Usada para leitura de
#include <stdio.h>                   textos ;
#include <stdlib.h>                • Propósito: ler unicamente
                                     uma cadeia de caracteres
int 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;
}
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;
}
GETS()
                                                • Neste exemplo, é declarado
#include <stdio.h>
                                                  um vetor de tamanho 10, mas
#include <stdlib.h>
                                                  o nome digitado contém 20
int 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;
}
FGETS()
#include <stdio.h>
                                   • O código ao lado utiliza fgets.
#include <stdlib.h>
                                     O vetor declarado tem 15
                                     posições e somente essas 15
int 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;
}
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;
}
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
#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;
}
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 a
int 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;
}
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;
}
Função STRCMP()
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;
}
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;
}
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 todas
as 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;
}
Exercícios
1. 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;
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!

Vetores, Matrizes e Strings em C Parte 3

  • 1.
    Programação de Computadores Aula 4e 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
  • 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.
    Strings Constantes • Sempreque o compilador encontra qualquer coisa entre aspas duplas, ele reconhece que se trata de uma string constante. Posição da memória string printf(“%s”, “Saudações”); 1092 S 1093 A 1094 U 1095 D 1096 A 1096 C 1097 O 1098 E 1099 S 1100 0
  • 4.
    SCANF() #include <stdio.h> • Observe a saída do #include <stdlib.h> programa! Consegue notar o que há de int 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.
    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.
    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.
    GETS() • Usada para leitura de #include <stdio.h> textos ; #include <stdlib.h> • Propósito: ler unicamente uma cadeia de caracteres int 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.
    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.
    GETS() • Neste exemplo, é declarado #include <stdio.h> um vetor de tamanho 10, mas #include <stdlib.h> o nome digitado contém 20 int 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.
    FGETS() #include <stdio.h> • O código ao lado utiliza fgets. #include <stdlib.h> O vetor declarado tem 15 posições e somente essas 15 int 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.
    PUTS() #include <stdio.h> #include <stdlib.h> intmain(){ 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.
    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; }
  • 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.
    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 a int 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.
    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.
  • 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.
    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.
    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 todas as 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.
    Exercícios 1. Desenvolver umprograma 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.
    Exercícios • Obtenha otamanho 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.
    Exercícios 5. Escreva umprograma 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!