Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Roteiro
Cadeias de caracteres
Declarao de cadeias de caracteres Leitura de cadeias de caracteres Escrita de cadeias de caracteres Manipulao de cadeias de caracteres
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
char texto[dimenso+1];
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
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
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
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)
A funo gets armazena na varivel vet todos os smbolos digitados at a ocorrncia do enter
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
A funo strlen retorna para uma varivel (no exemplo tam) o nmero de 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