Baixe o app para aproveitar ainda mais
Prévia do material em texto
20/07/2013 1 João Monlevade, 20 de julho de 2013 Universidade Federal de Ouro Preto Campus João Monlevade Prof. Mateus Ferreira Satler CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Uma cadeia de caracteres é uma sequência de caracteres justapostos e são fundamentais no desenvolvimento de programas computacionais. Exemplos de cadeias de caracteres (representadas internamente num programa): ◦ Mensagem de e-mail; ◦ Texto de um programa; ◦ Nome e endereço em cadastro de clientes, alunos, etc... ◦ Sequencia genética. Um gene (ou o DNA de algum organismo) é composto de sequencias dos caracteres A, T, G e C (nucleotídeos) 2 20/07/2013 2 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Uma variável usada para armazenar um caractere é representada da seguinte maneira: char letra; //a variável letra do tipo caracter letra=‘w’; // atribuída a letra w a variável letra Se em uma variável do tipo caracter podemos armazenar somente 1(um) caractere, então para armazenar vários caracteres (ex: “jose” , “carro” ) é necessário utilizar as cadeias de caracteres, representadas por vetores do tipo caracter. 3 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Observe a declaração abaixo: char cidade[14] ; A variável cidade é um vetor de caracteres (cadeia de caracteres) A variável cidade pode armazenar qualquer cadeia de até 14 caracteres 4 J o a o M o n l e v a d e 0 1 2 3 4 5 6 7 8 9 10 11 12 13 cidade 20/07/2013 3 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Sintaxe para declaração de cadeia de caracteres char identificador [qtde caracteres]; Exemplo: ◦ char nome[30]; ◦ char profissao[20]; 5 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Manipulação de cadeias de caracteres ◦ Vamos atribuir a variável nome, criada anteriormente, o nome Jose. nome[0] = ‘J’; nome[1] = ‘o’; nome[2] = ‘s’; nome[3] = ‘e’; Podemos ainda, obter um caracter qualquer da cadeia de caracteres da seguinte maneira: char letra = nome[2]; // letra receberá a letra da posição 2 da cadeia de caracteres, ou seja, ‘s’. 6 20/07/2013 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Os caracteres em C são representados internamente por códigos numéricos (ASCII). 7 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER A diferença entre caracteres e inteiros está apenas na maneira como são tratados, por exemplo, o código: char c = 97; printf("int : %d char : %c\n", c, c); Imprimirá int : 97 char : a O conteúdo da variável c é impressa em dois formatos distintos: %d (int) e %c (char). 8 20/07/2013 5 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Por questão de portabilidade, não se deve usar diretamente, no programa, o código de caracteres Ao invés, usa-se uma constante caractere: caractere entre apóstrofe. Reescrevendo o fragmento de código anterior: char c = ‘a’; printf("int : %d char : %c\n", c, c); Imprimirá int : 97 char : a Pode-se trocar char c por int c o resultado será o mesmo. 9 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Entrada/Saída de caracteres em C: ◦ ch = getchar( ); armazena um caractere digitado em ch até que ENTER seja pressionado; ◦ putchar(ch); Imprime o caractere ch na tela do computador; Exemplo: int main() { char ch; ch = getchar(); putchar(ch); return 0; } 10 20/07/2013 6 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Inicialização de cadeias de caracteres em C: char graus[5] = { A', B', C', A, D'}; char bin[8] = { 0', 1', 0', 1', 1', 1', 0', 1'}; 11 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Strings são tipos especiais de cadeias de caracteres em C e são terminadas, obrigatoriamente, pelo caractere nulo: \0 (\zero). Portanto, deve-se reservar uma posição para este caractere de fim de cadeia. 12 J o a o M o n l e v a d e 0 1 2 3 4 5 6 7 8 9 10 11 12 13 cidade J o a o M o n l e v a d e \0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 cidade 20/07/2013 7 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Exemplos de strings em C: char cidade[4] = { 'R', 'i', 'o', \ 0'}; char disc[40] = {'A','l','g','o','r','i','t','m','o','\ 0'}; Outras formas de inicializarmos strings em C: char cidade[4] = "Rio"; char disc[40] = "Algoritmo"; 13 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Para ilustrar a declaração e a inicialização de strings, consideremos as seguintes declarações: char s1[] = "" ; //2 aspas sem espaços entre elas char s2[] = "Rio de Janeiro"; char s3[81]; char s4[81] = "Rio"; ◦ s1 armazena uma string vazia. Tem um único elemento: ‘\0’ ; ◦ s2 representa um vetor com 15 elementos (caracteres); ◦ s3 representa uma cadeia de caracteres com até 80 caracteres e não é inicializada; ◦ s4 também é dimensionada para conter até 80 caracteres e é inicializada com a cadeia “Rio”. 14 20/07/2013 8 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Leitura de strings (scanf). int main() { char s[20]; printf(“Digite uma string: ”); scanf(“%s”,s); //sem & antes de s printf(“String digitada: %s”,s); return 0; } ◦ Neste caso, a leitura será feita até encontrar um caractere branco: espaço (‘ ’), tabulação (‘\t’) ou nova linha (‘\n’). Assim, se digitarmos “Rio de Janeiro”, s conterá apenas “Rio”; ◦ Não é necessário o & antes da variável s em scanf. 15 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Leitura/Impressão de strings (gets/puts). int main() { char s[20]; printf("Digite uma string: "); gets(s); printf("String digitada: "); puts(s); return 0; } ◦ Neste caso, se digitarmos “Rio de Janeiro” , s conterá “Rio de Janeiro” ◦ gets(s): lê a string s a partir do teclado; ◦ puts(s): imprime uma string na tela seguida de nova linha. 16 20/07/2013 9 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Exemplo: o programa a seguir imprime uma cadeia de caracteres, caractere por caractere: int main() { char s[30]; int i; printf("Digite uma string: "); gets(s); //imprime cada caractere da cadeia lida for(i=0; s[i]!='\0'; i++) printf("%c",s[i]); return 0; } ◦ O for acima equivale a printf(“%s”,s); 17 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Exemplo: o programa a seguir calcula e imprime o comprimento (número de caracteres) de uma cadeia: int main() { char s[30]; int i, n = 0; printf("Digite uma string: "); gets(s); for(i=0; s[i]!='\0'; i++) n++; printf("\nO tamanho de \"%s\" eh: %d",s,n); return 0; } 18 20/07/2013 10 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Exemplo: o programa a seguir faz uma copia de uma cadeia, fornecida pelo usuário, para outra: int main() { char dest[50], //string destino orig[50]; //string origem int i; printf("Digite uma string: "); gets(orig); //copia cada caractere de orig para dest for(i=0; orig[i]!='\0'; i++) dest[i] = orig[i]; //coloca o caractere nulo para marcar o fim da string dest[i] = '\0'; puts(dest); return 0; } 19 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Existem várias funções em C para manipulação de strings. Essas funções estão declaradas no arquivo string.h. Entre elas pode-se destacar: ◦ strcpy(char destino[ ], char origem[ ]) copia a string origem na string destino ◦ strlen(char str[ ]) retornao tamanho da string str ◦ strcat(char destino[ ], char origem[ ]) Faz concatenação (junção) da string origem com a string destino. O resultado é armazenado na string destino 20 20/07/2013 11 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Criar uma função que receba como parâmetro uma cadeia de caracteres (cadeia), seu tamanho (tam) e um segundo caractere (procurado). A função deverá retornar a quantidade que o caractere procurado foi encontrado na cadeia. Solução: ◦ Precisamos “varrer” a cadeia de caracteres (estrutura de repetição) e contar quantos são iguais ao caractere procurado, caractere a caractere. 21 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 22 20/07/2013 12 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 23 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 24 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado t e s t e t Função é chamada 20/07/2013 13 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 25 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 0 encontrados = 0 t e s t e t Variáveis são criadas e inicializadas CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 26 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 0 encontrados = 0 t e s t e t Estrutura de repetição onde será feita a busca 20/07/2013 14 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 27 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 0 encontrados = 0 t e s t e t Testa primeiro caractere da cadeira com o procurado CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 28 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 0 encontrados = 1 t e s t e t Como teste é válido, incrementa contador 20/07/2013 15 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 29 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 1 encontrados = 1 t e s t e t Incrementa o i e continua na estrutura de repetição CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 30 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 1 encontrados = 1 t e s t e t Testa segundo caracter e falha 20/07/2013 16 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 31 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 2 encontrados = 1 t e s t e t Incrementa o i e continua na estrutura de repetição CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 32 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 2 encontrados = 1 t e s t e t Testa terceiro caracter e falha 20/07/2013 17 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 33 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 3 encontrados = 1 t e s t e t Incrementa o i e continua na estrutura de repetição CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 34 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 3 encontrados = 1 t e s t e t Testa quarto caracter... 20/07/2013 18 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 35 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 3 encontrados = 2 t e s t e t Como teste é válido, incrementa contador CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 36 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 4 encontrados = 2 t e s t e tIncrementa o i e continua na estrutura de repetição 20/07/2013 19 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 37 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 4 encontrados = 2 t e s t e t Testa quinto caracter e falha CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 38 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 5 encontrados = 2 t e s t e t Incrementa o i e o teste da estrutura de repetição falha 20/07/2013 20 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER int conta(char cadeia[], int tam, char procurado) { int encontrados, i; encontrados=0; for (i=0; i<tam; i++) { if (cadeia[i] == procurado) { encontrados++; } } return encontrados; } 39 O teste será realizado supondo que: cadeia = “teste” tam = 5 procurado = ‘t’ cadeia procurado i = 5 encontrados = 2 t e s t e t Retorna o número de caracteres encontrados: 2 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 1. Fazer um programa para contar o número de espaços em brancos de uma string. 2. Refaça o programa anterior criando uma função que receberá como parâmetro a string e retornará o número de espaços em branco que a string contem. 3. Fazer um programa para contar o número de vogais numa cadeia de caractere. 4. Refaça o programa anterior criando uma função que receberá como parâmetro a string e retornará o número de vogais que a string contem. 40 20/07/2013 21 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 5. Escrever um programa para ler uma string (com mais de uma palavra) e faça com que a primeira letra de cada palavra fique em maiúscula. Para isso, basta subtrair 32 do elemento que deseja alterar para maiúsculo. chrNome[0] = chrNome[0] - 32; ◦ Exemplo: Entrada: lab. de linguagem de programacao Saída: Lab. De Linguagem De Programacao 6. Escreva uma função que receba uma string, conte quantos caracteres desta string são iguais a ‘a’ e substitua os que forem iguais a ‘a’ por ‘b’. A função deverá retornar o número de caracteres modificados. 41 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 7. Crie um procedimento que receba uma frase e a exiba na tela de forma soletrada, ou seja, cada letra deve ser exibida na tela separada por hífen. 8. Crie um procedimento que receba uma string de no máximo 50 caracteres e inverta a ordem da string digitada; ◦ Exemplo: Entrada: Teste Saída: etseT 9. Fazer um programa para determinar e imprimir uma string que será a concatenação de duas outras strings lidas. 42 20/07/2013 22 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 10. Faça uma função que receba uma string do usuário (máx. 20 caracteres) e um caractere qualquer. A função deverá remover todas as ocorrências do caractere da string e retornar o número de remoções. 11. Escreva uma função que receba uma cadeia de caracteres de tamanho máximo 100, e retornar 1 se esta cadeia é uma palíndrome e zero caso contrário. Uma palavra é dita ser palíndrome se a sequência de seus caracteres da esquerda para a direita é igual a sequência de seus caracteres da direita para a esquerda. ◦ Exemplo: arara, asa. 43 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 12. Um dos sistemas de encriptação mais antigos é atribuído a Júlio César: se uma letra a ser encriptada é a letra de número N do alfabeto, substitua-a com a letra (N+K), onde K é um número inteiro constante (César utilizava K = 3). Dessa forma, para K = 1 a mensagem “Ataque ao amanhecer” se torna “bubrfabpabnboifdfs”. Faça um procedimento que receba como entrada uma mensagem e um valor de K e modifique a mensagem original pela mensagem criptografada pelo código de César. Desenvolva também um procedimento que faça o contrário, ou seja, receba como entrada uma mensagem criptografada pelo código de César e modifique pela mensagem original. 44 20/07/2013 23 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Montar uma biblioteca com funções para manipular strings. IDEIA: Uma biblioteca é um conjunto de subrotinas e tipos de dados que você pode incluir no seu programa sem a necessidade de digitar novamente o código. ◦ Exemplo: #include <stdio.h> // biblioteca do sistema! Podemos criar nossas próprias bibliotecas! 45 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Como fazer: 1. No seu Projeto, crie e inclua um novo arquivo chamado “biblio.h” , onde iremos colocar somente os protótipos das subrotinas da nossa biblioteca. 2. Crie e inclua no mesmo Projeto o arquivo “biblio.c” , onde iremos colocar a implementação das subrotinas prototipadas no arquivo “biblio.h” 3. No arquivo main.c do seu projeto, basta fazer referência à biblioteca criada (#include “biblio.h” ). Observe que você não utilizou os sinais de maior e menor para indicar a biblioteca, mas sim aspas. Isso indica que a biblioteca está no mesmo diretório do projeto. 46 20/07/2013 24 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Agora, construa sua biblioteca que forneça os principais recursos para a manipulação de strings. Sendo as funcionalidades propostas: ◦ Copia( ): copia uma string para outra ◦ Compara( ): compara duas strings ◦ Minusculo( ): transforma os caracteres em minúsculo ◦ Maiusculo( ): transforma os caracteres em maiúsculo ◦ Sentenca( ): organiza a string como sentença ◦ Pessoa( ): coloca os caracteres iniciais em maiúsculo ◦ Soma( ): soma duas strings ◦ ProcuraTrecho( ): procura uma string em outra ◦ ProcuraCaracter( ): procura o ocorrência de caracteres na string 47
Compartilhar