Buscar

Aula6_TT214_Linguagem e Técnica de Programação I

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

TT214 – Linguagem e Técnica de 
Programação I 
1º Semestre – 2013 
Prof. Suelen Mapa de Paula 
 
1 
Aula 6 
Contatos 
 Suelen Mapa de Paula 
 suelenmapa@gmail.com 
 suelen@dca.fee.unicamp.br 
 
 Monitor: ??? 
2 
Preencher o questionário 
 Disponível em: 
 http://goo.gl/rmyfrl 
3 
Ementa da aula 
 Introdução; 
 Constantes String; 
 Variáveis String; 
 Leitura de strings; 
 Impressão de strings; 
 Inicialização de strings; 
 Funções de manipulação de strings; 
 Exercícios; 
 Referências. 
 
** Este material foi baseado nas aulas do professor Guilherme Coelho, sob a 
autorização do mesmo. 
 
 
4 
Introdução 
 Strings são usadas para armazenar e manipular textos em 
linguagem C; 
 Tais textos podem ser nomes, palavras e até mesmo frases; 
 Strings são utilizadas na maioria dos programas. 
 Em C, strings são: 
 Vetores do tipo char; 
 Terminadas pelo caractere NULL (‘\0’) 
 NULL tem código ASCII igual a 0 em decimal. 
 É possível acessar cada caractere de uma string através 
do acesso à posição correspondente do vetor. 
 5 
Constantes String 
 O compilador da linguagem C sempre considera tudo 
que está entre aspas duplas uma constante do tipo 
string; 
 Ex.: printf(“%s”, “Saudacoes!”); 
 “Saudacoes!” -> é uma string constante; 
 %s – é o código de impressão associado a uma string. 
 Ao detectar uma string constante, o compilador aloca 
posições de memória para armazená-la: 
 01 byte por caractere; 
 A última posição sempre terá o caractere null (‘\0’): 
 Permite reconhecer o final da string. 
 6 
Constantes String 
 Supondo que a constate “Saudacoes!” seja armazenada a 
partir do endereço de memória 1450, teríamos: 
 
7 
1449 ... 
1450 S 
1451 a 
1452 u 
1453 d 
1454 a 
1455 c 
1456 o 
1457 e 
1458 s 
1459 ! 
1460 \0 
Variáveis Strings 
 Variáveis do tipo string nada mais são do que vetores 
com elementos do tipo char; 
 Ex.: char nome[15]; 
8 
#include <stdio.h> 
 
int main() { 
 char nome[15]; 
 
 printf(“Digite o seu nome: “); 
 scanf(“%s”, nome); 
 printf(“Saudacoes, %s.\n”, nome); 
 
 return 0; 
} 
O comando scanf lê automaticamente 
o texto do teclado até encontrar um 
caractere branco, salva os dados na 
memória e coloca um ‘\0’ no final. 
Atenção: como em qualquer vetor, nome corresponde ao endereço da primeira 
posição de memória alocada  não se deve usar o & na função scanf. 
Lendo Strings 
 A leitura de uma string consiste em dois passos: 
 Reservar um espaço de memória para armazená-la (variável); 
 Chamar uma função de leitura que receba os dados do teclado 
e os armazene na variável (scanf, gets, ...); 
 Como vimos no exemplo anterior, a função scanf() faz o 
seguinte: 
 Lê cada caractere não branco da entrada e os armazena 
sequencialmente no vetor (variável); 
 Ao encontrar o primeiro caractere em branco, o substitui pelo 
caractere ‘\0’ (null). 
 
9 
Scanf é limitado! Como ler, por exemplo, nomes completos? 
Lendo strings 
 Exemplo: 
10 
#include <stdio.h> 
 
int main() { 
 char nome[35]; 
 
 printf(“Digite o seu nome: ”); 
 scanf(“%s”, nome); 
 printf(“Saudacoes, %s.\n”, nome); 
 
 return 0; 
} 
Digite o seu nome: Suelen Mapa 
Saudacoes, Suelen. 
Lendo Strings 
 Uma função alternativa para ler strings é a função gets(): 
 Esta função lê caracteres do teclado até encontrar o comando de nova 
linha ‘\n’ (gerado quando pressionamos ENTER); 
 Quando gets() encontra o ‘\n’, todos os caracteres anteriores são 
armazenados na string, e ‘\0’ é inserido no final; 
 ATENÇÃO: gets() lê caracteres e os armazena em 
memória até que seja encontrado o ‘\n’. 
 Não é feita nenhuma verificação do número de caracteres lidos; 
 Há o risco de se estourar o tamanho do vetor declarado para ler o 
texto. 
 Nesse caso, as posições de memória seguintes serão sobrepostas! 
 
 
11 
Lendo Strings 
 Exemplo: 
12 
#include <stdio.h> 
 
int main() { 
 char nome[35]; 
 
 printf(“Digite o seu nome: ”); 
 gets(nome); 
 printf(“Saudacoes, %s.\n”, nome); 
 
 return 0; 
} 
Digite o seu nome: Suelen Mapa 
Saudacoes, Suelen Mapa. 
Imprimindo Strings 
 Existem duas funções principais para impressão de strings 
na tela: printf() e puts(): 
 printf() utiliza o código de impressão “%s” para identificar a 
impressão de uma string; 
 Ex.: printf(“Saudacoes, %s.\n”, nome); 
 A string é impressa exatamente como armazenada. 
 puts() é o complemento da função gets(); 
 Recebe diretamente o nome da string que se deseja imprimir; 
 Reconhece o ‘\0’ como final da string, e imprime automaticamente um 
‘\n’ (quebra de linha) no final; 
 Ex.: puts(nome); 
 13 
Imprimindo Strings 
14 
#include <stdio.h> 
 
int main() { 
 char nome[81]; 
 
 printf(“Digite o seu nome: ”); 
 gets(nome); 
 puts(“Saudacoes, ”); 
 puts(nome); 
 
 printf(“Sobrenome: ”); 
 puts(&nome[7]); 
 return 0; 
} 
Digite o seu nome: Suelen Mapa 
Saudacoes, 
Suelen Mapa 
Sobrenome: Mapa 
• É possível imprimir parte de uma 
string usando puts(). 
• Basta fornecer o endereço da posição a 
partir da qual se deseja imprimir. 
Inicialização de Strings 
 Como strings nada mais são do que vetores de 
elementos do tipo char, é possível inicializá-las como 
fizemos com vetores de valores numéricos: 
 Ex.: char nome[] = {‘A’, ‘n’, ‘a’, ‘\0’}; 
 Não se pode esquecer do caractere ‘\0’ ao fazer este tipo de 
inicialização! 
 No entanto, os compiladores da linguagem C oferecem 
uma forma alternativa de inicialização, que é equivalente 
mas muito mais simples: 
 Ex.: char nome[] = “Ana”; 
 Neste segundo caso, o ‘\0’ é colocado automaticamente. 
 15 
Algumas observações 
 Como saber se uma string é igual a outra? A idéia inicial é 
escrever um programa como esse: 
16 
int main() 
{ 
 char ola[] = "ola"; 
 char ola2[] = "ola"; 
 
 if(ola == ola2) 
 printf("Iguais!"); 
 else 
 printf("Nao sao iguais!"); 
 
 return 0; 
} 
Qual será a saída 
deste programa??? 
Algumas observações 
 Ficou espantado??? 
 Isso acontece porque o if na verdade está comparando dois 
ponteiros (lembre-se, strings são vetores sem índice são 
ponteiros). 
 Veremos que a linguagem C oferece um jeito muito simples de 
realizar essa comparação. 
17 
Nao sao iguais! 
Algumas observações 
 Como fazer para copiar uma string? 
 Tente compilar o seguinte programa. Veja se ele faz o que foi 
solicitado. 
18 
#include <stdio.h> 
int main() 
{ 
 char str1[] = "abc"; 
 char str2[10]; 
 
 str2 = str1; 
 
 return 0; 
} 
 
Algumas observações 
 Quem tentou compilar o programa anterior deve ter 
descoberto que ele não funciona! 
 
 Apenas lembrando: em C “não existe” o conceito de variável 
do tipo string, o que temos são vetores de caracteres 
terminados em \0 . Por este motivo não podemos copiar 
um vetor diretamente, uma solução mais lógica é percorrer o 
vetor e copiar cada elemento. 
 
 Veremos que a linguagem C também oferece uma forma 
simples de realizar esta cópia. 
19 
Funções de Manipulação de Strings 
 A manipulação de cadeias de texto é tão comum em 
programação que existe até uma biblioteca própria em C para 
reunir estas funções 
 Biblioteca : string.h; 
 Neste tópico, veremos algumas das funções de manipulação destrings oferecidas em C: 
 strlen(texto) -> retorna o tamanho da string texto em número de 
caracteres (não considera o ‘\0’ na contagem); 
 strcat(destino, fonte) -> concatena a string fonte no final da string 
destino; 
 strcmp(texto1, texto2) -> compara as strings texto1 e texto2, 
usando a ordem alfabética. 
 Pode retornar valor negativo (se texto1 < texto2), positivo (se texto1 > texto 2) 
ou nulo (se texto1 == texto2). 
 
 
 
 
20 
Funções de Manipulação de Strings 
 Exemplo 1: strlen() 
21 
#include <stdio.h> 
#include <string.h> 
 
int main() { 
 char nome[81]; 
 int i; 
 
 printf("Digite nome: "); 
 gets(nome); 
 
 puts("Seu nome eh: "); 
 for (i=0; i < strlen(nome); i++){ 
 printf("%c\n", nome[i]); 
 } 
 
 return 0; 
} 
Digite nome: Maria 
Seu nome eh: 
M 
a 
r 
i 
a 
Funções de Manipulação de Strings 
 Exemplo 1: strlen() 
22 
#include <stdio.h> 
#include <string.h> 
 
int main() { 
 char nome[81]; 
 int i; 
 
 printf("Digite nome: "); 
 gets(nome); 
 
 puts("Seu nome eh: "); 
 for (i=0; i < strlen(nome); i++){ 
 printf("%c\n", nome[i]); 
 } 
 
 return 0; 
} 
Digite nome: Maria 
Seu nome eh: 
M 
a 
r 
i 
a 
Funções de Manipulação de Strings 
 Exemplo 2: strcat() 
 
23 
#include <stdio.h> 
#include <string.h> 
 
int main() { 
 char nome[81], sobrenome[81]; 
 int i; 
 
 printf("Digite nome: "); 
 gets(nome); 
 printf("Digite sobrenome: "); 
 gets(sobrenome); 
 
 puts(”Nome completo: "); 
 strcat(nome, sobrenome); 
 printf("%s\n", nome); 
 return 0; 
} 
Digite nome: 
Suelen 
Digite sobrenome: 
Mapa 
Nome completo: 
SuelenMapa 
Funções de Manipulação de Strings 
 Exemplo 3: strcmp() 
 
 
24 
#include <stdio.h> 
#include <string.h> 
 
int main() { 
 char resp[] = "branco"; 
 char r[40]; 
 
 puts("Qual a cor do cavalo branco de Napoleão?"); 
 gets(r); 
 
 while (strcmp(r, resp) != 0) { 
 puts("Resposta errada. Tente de novo."); 
 gets(r); 
 } 
 
 puts("Correto!"); 
 return 0;} 
Funções de Manipulação de Strings 
 Exemplo 4: copia uma string em outra. 
 strcpy( destino, origem) 
25 
#include <stdio.h> 
#include<string.h> 
int main() { 
 char str2[81]; 
 char str1[]="abc"; 
 strcpy(str2, str1); 
 printf("A string copiada eh: %s ", str2); 
 
 return 0; 
} 
A string copiada eh: abc 
Funções de Manipulação de Strings 
 Outras funções importantes da biblioteca string.h: 
 strcpy(destino, fonte): copia a string fonte para a string destino; 
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIO
NS/strcpy.html 
 strstr(texto, busca): procura a ocorrência da substring busca na 
string texto e retorna o endereço do início da primeira ocorrência de 
busca (ou null caso não encontre); 
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIO
NS/strstr.html 
 strchr(texto, ch): procura a primeira ocorrência do caractere ch na 
string texto e retorna a posição deste caractere. 
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIO
NS/strchr.html 
 
26 
Funções de Manipulação de Strings 
 Neste site, você encontra alguns exemplos de como 
utilizar as funções descritas no slide anterior, além de 
outras não citadas: 
 
http://homepages.dcc.ufmg.br/~joaoreis/Site%20de%20tut
oriais/c_int/strings.htm 
27 
Exercícios 
1. Escreva um programa que leia uma string qualquer (máximo 80 
caracteres) e retorne o número total de caracteres contidos 
nessa string. Não use a função strlen(). 
2. Escreva um programa que leia uma string qualquer (máximo 80 
caracteres) e imprima na tela a sua versão espelhada, ou seja, a 
mesma string mas com a ordem dos caracteres invertida . 
3. Escreva um programa que leia um pequeno parágrafo, uma 
determinada palavra e indique para o usuário se esta palavra está 
presente ou não no parágrafo lido. 
4. Escreva um programa que leia um pequeno parágrafo, uma 
determinada palavra e indique o número de ocorrências desta 
palavra no parágrafo lido. 
28 
Exercícios 
5. Faça um programa que teste se uma palavra é um palíndromo, 
ou seja, se ela pode ser lida da mesma forma tanto na ordem 
correta quanto na ordem invertida. Ex.: arara, ovo, omo. 
6. Refaça o exercício 5 de forma que seu programa não seja 
sensível a letras maiúsculas. 
7. Modifique o exercício 6 para que ele passe a verificar se uma 
frase é um palíndromo. 
ATENÇÃO: Os exercícios de número 1, 2 e 5 deverão ser 
entregues, via Teleduc, até o dia 27/09/2013. Um deles será sorteado e 
corrigido. A correção deste exercício, combinada com a correção dos 
exercícios solicitados nos próximos tópicos, terá nota equivalente a 
uma atividade do Susy. Estes exercícios devem ser feitos 
individualmente. 
29 
Referências 
 MIZRAHI, V. V., Treinamento em Linguagem C – Curso Completo. 
2a Edic ̧ão, Pearson Makron Books, 2005. 
 ASCENCIO, A. F. G. & DE CAMPOS, E. A. V., Fundamentos da 
Programação de Computadores – Algoritmos, Pascal e C/C++. 
Pearson Prentice Hall, 2003. 
 The GNU C Library – Referência on-line: 
http://www.gnu.org/software/libc/manual/html_node/String-
and-Array-Utilities.html 
 Tutorial linguagem C (DCC - UFMG): 
 http://homepages.dcc.ufmg.br/~joaoreis/Site%20de%20tutoriais
/c_int/strings.htm 
 30

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes