Sei sulla pagina 1di 51

Cadeias de Caracteres

Profa. Juliana de Oliveira

Roteiro
Cadeias de caracteres
Declarao de cadeias de caracteres Leitura de cadeias de caracteres Escrita de cadeias de caracteres Manipulao de cadeias de caracteres

Exemplos Exerccios Referncias

Cadeias de caracteres
Uma cadeia de caracteres ou string uma sequncia de letras e smbolos
Os smbolos podem ser espaos em branco, dgitos e vrios outros como pontos de exclamao e interrogao, smbolos matemticos, etc.

A linguagem C no possui um tipo de dado especfico para cadeia de caracteres Ento para armazenar uma cadeia de caracteres em linguagem C utiliza-se vetores, nas quais cada posio representa um caractere Os compiladores da linguagem C identificam o fim de uma cadeia de caracteres por meio do caractere nulo, ou seja, por meio de \0

Declarao de cadeias de caracteres


Na declarao de uma cadeia de caracteres deve-se utilizar uma posio alm do tamanho desejado para que possa ser colocado o marcador que finaliza a cadeia \0
Este caractere no precisa ser armazenado manualmente, isto feito automaticamente pelo compilador

char texto[dimenso+1];

Declarao de cadeias de caracteres

Por exemplo, para armazenar a palavra cadeia deve-se declarar um vetor do tipo char com sete posies

ndice Valor
Posio na memria

0 C
863

1 A

2 D

3 E

4 I

5 A

6 \0

864 865 866

867 867 868

Declarao de cadeias de caracteres

A varivel NOME poder armazenar at 20 caracteres


A varivel SEXO poder armazenar at trs caracteres A varivel CURSO poder armazenar apenas 1 caractere

Declarao de cadeias de caracteres


Declarao com inicializao

No primeiro exemplo, a varivel nome recebeu as letras separadamente (inclusive o caractere nulo) Por isso, cada uma das letras estava entre apstrofos Esta a maneira de identificar um caractere isoladamente
No segundo exemplo, a varivel NOME foi inicializada com uma palavra, recebendo automaticamente o caractere nulo Por isso, a palavra Programa estava entre aspas Esta a maneira de identificar uma cadeia de caracteres

Declarao de cadeias de caracteres


Declarao com inicializao

Quando houver a necessidade de usar apstrofos, aspas ou barras invertidas na cadeia de caracteres, estes devero ter uma barra invertida antecedendo-os

Em todos estes exemplos, no houve necessidade de expressar o nmero de posies dentro dos colchetes, pois esse nmero definido automaticamente em juno da inicializao

Leitura de cadeias de caracteres


Inicializao por meio da atribuio (depois da declarao)

A varivel vet1 recebe um valor constante, a cadeia Programa de computador

Leitura de cadeias de caracteres


Inicializao por meio do teclado

Para ler na tela uma cadeia de caracteres, utiliza-se o parmetro %s A funo scanf, quando utilizada com o parmetro %s l todos os caracteres at encontrar um caractere igual a espao Observe que a varivel na funo scanf, no deve ser precedida do caractere &, pois o nome de um vetor j um endereo de memria (o endereo de memria do comeo do vetor)

Leitura de cadeias de caracteres


Inicializao por meio do teclado

A funo gets armazena na varivel vet todos os smbolos digitados at a ocorrncia do enter

Escrita de cadeias de caracteres


Imprimindo na tela

Para escrever na tela uma cadeia de caracteres, utiliza-se o parmetro %s

A funo printf, imprime o contedo do vetor vet na tela

Escrita de cadeias de caracteres


Imprimindo na tela

A funo puts, imprime o contedo do vetor vet na tela

Manipulao de cadeias de caracteres


As cadeias de caracteres so to importantes que existe uma biblioteca de funes de comandos
#include <string.h>

Manipulao de cadeias de caracteres


Copiando cadeias de caracteres

A funo strcpy copia a cadeia vet2 para a cadeia vet1 A funo strncpy copia os n primeiros caracteres (no exemplo n=3) da cadeia vet2 para a cadeia vet1

Manipulao de cadeias de caracteres


Descobrindo o nmero de caracteres de uma cadeia

A funo strlen retorna para uma varivel (no exemplo tam) o nmero de caracteres da cadeia vet

Manipulao de cadeias de caracteres


Invertendo os caracteres de uma cadeia

A funo strrev inverte todos os caracteres da cadeia vet

Exemplos
1. Faa um algoritmo em pseudocdigo que compara o contedo de duas sequncias, posio a posio, e contabiliza a quantidade de encontros, desencontros e lacunas. Implemente o algoritmo em linguagem C

INCIO_ALGORITMO DECLARE seq1[100], seq2[100] LITERAL DECLARE qtd1, qtd2, i, n, encontro, lacuna, desencontro NUMRICO ESCREVE "Entre com a sequencia 1: " L seq1 ESCREVE "Entre com a sequencia 2: " L seq2 qtd1 TAMANHO seq1 qtd2 TAMANHO seq2 SE (qtd1=qtd2) ENTO n qtd1 SENO SE (qtd1>qtd2) ENTO n qtd1 ENQUANTO (qtd2<n) FAA seq2[qtd2] ' ' qtd2 qtd2+1 FIM ENQUANTO SENO n qtd2 ENQUANTO (qtd1<qtd2) FAA seq1[qtd1] ' ' qtd1 qtd1+1 FIM ENQUANTO FIM SE FIM SE encontro 0 lacuna 0 desencontro 0 ...

... PARA i 1 AT n FAA SE((seq1[i]=seq2[i])e((seq1[i]' ')e(seq2[i]' '))) ENTO encontro encontro+1 SENO SE ((seq1[i]=' ')ou(seq2[i]=' ')) ENTO lacuna lacuna+1 SENO desencontro desencontro+1 FIM SE FIM SE FIM PARA ESCREVE "Encontros: ",encontro ESCREVE "Desencontros: ",desencontro ESCREVE "Lacunas: ",lacuna FIM_ALGORITMO

Exemplos
2. Faa um algoritmo em pseudocdigo que receba uma frase, calcula e mostra a quantidade de vogais da frase digitada. O programa conta as vogais maisculas e minsculas . Implemente o algoritmo em linguagem C

INCIO_ALGORITMO DECLARE i, total, qtd NUMRICO INTEIRO DECLARE frase[100] LITERAL ESCREVE "Entre com uma frase de at 99 caracteres " L frase qtd TAMANHO frase total conta_vogal(frase,qtd) ESCREVE "A frase possui vogais ",total FIM_ALGORITMO

SUB-ROTINA conta_vogal(DECLARE frase[] LITERAL, DECLARE qtd NUMRICO) { DECLARE i, soma NUMRICO soma 0 PARA i 1 AT qtd FAA ESCOLHA (frase[i]) CASO 'a': soma soma+1 CASO 'A': soma soma+1 CASO 'e': soma soma+1 CASO 'E': soma soma+1 CASO 'i': soma soma+1 CASO 'I': soma soma+1 CASO 'o': soma soma+1 CASO 'O': soma soma+1 CASO 'u': soma soma+1 CASO 'U': soma soma+1 FIM ESCOLHA FIM PARA RETORNE soma FIM_SUB-ROTINA conta_vogal

Exemplos
3. Faa um algoritmo em pseudocdigo que receba uma frase, calcula e mostra a quantidade de palavras da frase digitada . Implemente o algoritmo em linguagem C

INCIO_ALGORITMO DECLARE i, total, qtd NUMRICO INTEIRO DECLARE frase[100] LITERAL ESCREVE "Entre com uma frase de at 99 caracteres " L frase qtd TAMANHO frase total conta_palavra(frase,qtd) ESCREVE "A frase possui palavras ",total FIM_ALGORITMO SUB-ROTINA conta_palavra(DECLARE frase[] LITERAL, DECLARE qtd NUMRICO INTEIRO) DECLARE i, soma NUMRICO soma 0 PARA i 1 AT qtd FAA SE((frase[i]=' ')ou(frase[i]='\0')) soma soma+1 FIM SE FIM PARA RETORNE soma FIM_SUB-ROTINA conta_palavra

Exerccios
1. Faa um algoritmo em pseudocdigo que receba uma frase, calcula e mostra a quantidade de consoantes da frase digitada. O programa conta as consoantes maisculas e minsculas. Implemente o algoritmo em linguagem C

INCIO_ALGORITMO DECLARE i, total, qtd NUMRICO INTEIRO DECLARE frase[100] LITERAL ESCREVE "Entre com uma frase de at 99 caracteres " L frase qtd TAMANHO frase total conta_consoante(frase,qtd) ESCREVE "A frase possui consoantes ",total FIM_ALGORITMO

SUB-ROTINA conta_consoante(DECLARE frase[] LITERAL, DECLARE qtd NUMRICO INTEIRO) DECLARE i, soma NUMRICO INTEIRO soma 0 PARA i 1 AT qtd FAA ESCOLHA(frase[i]) CASO 'a': CASO 'A': CASO 'e': CASO 'E': CASO 'i': CASO 'I': CASO 'o': CASO 'O': CASO 'u': CASO 'U': CASO ' ': CASO contrrio: soma soma+1 FIM ESCOLHA FIM PARA RETORNE soma FIM_SUB-ROTINA conta_consoante

Exerccios
2. Faa um algoritmo em pseudocdigo que criptografa uma frase digitada pelo usurio. Neste caso a criptografia troca as vogais da frase por *. Implemente o algoritmo em linguagem C

INCIO_ALGORITMO DECLARE i, qtd NUMRICO INTEIRO DECLARE frase[100] LITERAL ESCREVE "Entre com uma frase de at 99 caracteres " L frase qtd TAMANHO frase criptografa(frase,qtd) ESCREVE "A frase criptografada fica: ",frase FIM_ALGORITMO

SUB-ROTINA criptografa(DECLARE frase[] LITERAL, DECLARE qtd NUMRICO INTEIRO) DECLARE i NUMRICO PARA i 1 AT qtd FAA ESCOLHA(frase[i]) CASO 'a': frase[i] '*' CASO 'A': frase[i] '*' CASO 'e': frase[i] '*' CASO 'E': frase[i] '*' CASO 'i': frase[i] '*' CASO 'I': frase[i] '*' CASO 'o': frase[i] '*' CASO 'O': frase[i] '*' CASO 'u': frase[i] '*' CASO 'U': frase[i] '*' FIM ESCOLHA FIM PARA FIM_SUB-ROTINA criptografa

Exerccios
3. Faa um algoritmo em pseudocdigo que receba uma frase e uma palavra, calcula e mostra a quantidade de vezes que a palavra digitada aparece na frase. Implemente o algoritmo em linguagem C

INCIO_ALGORITMO DECLARE frase[100], palavra[50], aux[100] LITERAL DECLARE qtdf, qtdp, i, j, k, soma NUMRICO INTEIRO ESCREVE "Entre com uma frase de at 99 caracteres: " L frase ESCREVE "Entre com uma palavra de at 49 caracteres: " L palavra qtdf TAMANHO frase qtdp TAMANHO palavra soma 0 k 1 PARA i 1 AT qtdf SE ((frase[i]' ')e(frase[i]'\0')) ENTO aux[k] frase[i] k k+1 SENO SE (qtdp=k) ENTO j 1 ENQUANTO (j<k) FAA SE (palavra[j]aux[j]) ENTO j k+10 k 1 SENO SE (j<k) ENTO j j+1 SE (j+1=k) ENTO soma soma+1 k 1 FIM SE FIM SE FIM SE FIM ENQUANTO FIM SE k 1 FIM SE FIM PARA ESCREVE "A palavra aparece vezes no texto ",palavra,soma FIM_ALGORITMO

Exerccios
4. Faa um algoritmo em pseudocdigo que criptografa uma frase digitada pelo usurio. Neste caso a criptografia inverte a frase. Implemente o algoritmo em linguagem C

INCIO_ALGORITMO DECLARE frase[100], fraseinvertida[100] LITERAL DECALRE qtd, i NUMRICO INTEIRO ESCREVE "Entre com uma frase de at 99 caracteres: " L frase inverte(frase,fraseinvertida) ESCREVE fraseinvertida FIM_ALGORITMO SUB-ROTINA inverte(DECLARE frase[], fraseinvertida[] LITERAL) DECLARE qtd, i, n NUMRICO INTEIRO qtd TAMANHO frase n qtd-1 PARA i 1 AT qtd FAA fraseinvertida[n] frase[i] n n-1 FIM PARA fraseinvertida[i] '\0' FIM_SUB-ROTINA inverte

Exerccios
5. Faa um algoritmo em pseudocdigo que receba uma palavra e verifica se constitui um palndromo, ou seja, se a palavra escrita do fim para o comeo fica igual palavra escrita do comeo para o fim. Implemente o algoritmo em linguagem C

INCIO_ALGORITMO DECLARE frase[100], fraseinvertida[100] LITERAL DECLARE qtd, qtd1, i NUMRICO INTEIRO ESCREVE "Entre com uma frase de at 99 caracteres: " L frase qtd TAMANHO frase inverte(frase,fraseinvertida,qtd) palindromo(frase,fraseinvertida,qtd) ESCREVE frase ESCREVE fraseinvertida FIM_ALGORITMO SUB-ROTINA inverte(DECLARE frase[], fraseinvertida[] LITERAL, DECLARE qtd NUMRICO INTEIRO) DECLARE i, qtd1, n NUMRICO INTEIRO n qtd-1 PARA i 1 AT qtd FAA fraseinvertida[n] frase[i] n n-1 FIM PARA fraseinvertida[i] '\0' FIM_SUB-ROTINA inverte SUB-ROTINA palindromo(DECLARE frase[], fraseinvertida[] LITERAL, DECLARE qtd NUMRICO INTEIRO) DECLARE i NUMRICO INTEIRO PARA i 1 AT qtd FAA SE (frase[i]fraseinvertida[i]) ENTO ESCREVE "No um palndromo " i qtd+100 SENO SE (i=qtd) ENTO ESCREVE " um palndromo FIM SE FIM SE FIM PARA FIM_SUB-ROTINA palindromo

Referncias
ASCENCIO, A.F.G.; CAMPOS, E.A.V. Fundamentos da Programao de Computadores: Algoritmos, Pascal e C/C++, 2 ed. So Paulo: Pearson Prentice Hall, 2006 FARRER, H. et al. Algoritmos estruturados, 3 ed. Rio de Janeiro: LTC, 1999 MOKARZEL, F.C; SOMA, N.Y., Introduo Cincia da Computao, Campus, 2008 SCHILDT, H., C Completo e Total, Makron Books, 1997