Baixe o app para aproveitar ainda mais
Prévia do material em texto
15/10/2007 Laboratório de Programação I 1 Laboratório de Programação I CADEIA DE CARACTERES (string) 02/03/2013 Jair Alves Barbosa 15/10/2007 Laboratório de Programação I 2 REVISÃO • Uma cadeia de caracteres (ou string) consiste em uma matriz homogênea do tipo escalar char (caracter) que ocupa 1 byte de memória para cada caracter; char <identificador> [tamanho]; • Estas cadeias são sempre encerradas pelo caracter nulo, representado pelo símbolo ‘\0’, por isso sempre deve-se especificar um elemento a mais na cadeia de caracteres desejada; • A linguagem C possui recursos para referência das cadeias de caracteres como se elas fossem um dado simples, usando uma codificação especifica para a sua correta manipulação; • O armazenamento de uma cadeia de caracteres pode ser feita também pela função scanf( ), mas devem existir alguns cuidados: – não é necessário o operador de endereço (&); – o espaço em branco finaliza a cadeia de caracteres lida, ou seja, a instrução scanf() insere o \0 no primeiro espaço branco; Cadeia de Caracteres (string) 15/10/2007 Laboratório de Programação I 3 Usando a FUNÇÃO scanf Uma das maneiras de ler uma string é com scanf, ela sempre acrescenta o ‘\0’ no primeiro espaço em branco, desprezando o restante da string. Além disso, também não é necessário o uso do operador &, pois o nome da string é o seu endereço inicial. Exemplo: scanf(“%s”, nome); FUNÇÃO gets Faz a leitura de uma string do dispositivo de entrada (teclado é padrão), porém deve-se ter cuidado com a sua utilização, pois ela não verifica o tamanho da string. gets(<identificador_string>); Exemplo: char nome [ 25 ]; printf ("\n Ola %s", nome); printf(“Digite o seu nome”); // Como 1º argumento de printf é gets(nome); // string, printf(nome); é válido Cadeia de Caracteres (string) 15/10/2007 Laboratório de Programação I 4 FUNÇÃO puts Serve para imprimir uma string por vez, onde o endereço da string deve ser informado no argumento da função. Observe o exemplo que ilustra algumas das muitas possibilidades de puts. Puts termina a impressão de uma string com nova linha, portanto a impressão de duas strings na mesma linha deverá feita por printf. Exemplo: int main(void ) { char nome[40]; puts(“Digite seu nome: ”); gets(nome); puts(“Olá, ”); puts(nome); puts(“Puts sempre salta uma linha.”); puts(&nome[4]); } Digite seu nome: Fernando Zara Olá, Fernando Zara Puts sempre salta uma linha ando Zara Simulação do resultado em tela: Cadeia de Caracteres (string) 15/10/2007 Laboratório de Programação I 5 Uso de scanf junto com gets • Quando se utiliza a função scanf para leituras de valores numéricos e logo após as funções de leitura de caracteres (gets,getch,getche ou getchar), deve-se limpar o buffer de teclado ( local temporário para guardar os caracteres digitados antes de serem repassados ao programa) através do uso da função fflush(stdin) antes do uso das funções de manipulação de caracteres. stdin = identificação da unidade padrão de entrada (teclado) Cadeia de Caracteres 15/10/2007 Laboratório de Programação I 6 Exemplo: #include<stdio.h> #include<conio.c> #include<ctype.h> int main (void) { float peso; char sexo, nome[20]; puts("Informe o seu nome completo: "); gets(nome); printf("\nInforme o seu peso em Kg: "); scanf("%f",&peso); printf("Escolha a opcao coerente com o seu sexo\n\tM = masculino\n\tF = Feminino: "); sexo = toupper(getchar()); clrscr(); printf("\n\nNome:%s\nPeso:%2.1f\t Sexo: %c",nome,peso,sexo); getch(); } #include<stdio.h> #include<conio.c> #include<ctype.h> int main (void) { float peso; char sexo, nome[20]; puts("Informe o seu nome completo: "); gets(Nome); printf("\nInforme o seu peso em Kg: "); scanf("%f",&peso); fflush(stdin); printf("Escolha a opcao coerente com o seu sexo\n\tM = masculino\n\tF = Feminino: "); sexo = toupper(getchar()); clrscr(); printf("\n\nNome:%s\nPeso:%2.1f\t Sexo: %c",nome,peso,sexo); getch(); } Cadeia de Caracteres–limpa a memória temporária 15/10/2007 Laboratório de Programação I 7 Funções de Manipulação de String Facilitando a manipulação de strings existem várias funções descritas a seguir, que tem seus protótipos definidos no arquivo string.h: strlen(x) retorna o tamanho da string armazenada, sem ‘\0’ strcat(x,y) concatena na string x a string y, sem alterar y strcpy(x,y) copia uma string em outra, ou seja, copia y para x strcmp(X,Y) compara duas strings retornando : 0 x=y, <0 x <y ou > 0 x>y stricmp(X,Y) compara duas strings desprezando diferenças entre maiúsculas e minúsculas : 0 x=y, <0 x <y ou > 0 x>y strstr(x,y) retorna o endereço de memória onde começa y em x ou NULL se x não contém y tolower(x) retorna o minúsculo do caractere x (ctype.h) toupper(y) retorna o maiúsculo do caractere y (ctype.h) atoi(x), atol(x), atof(x) conversão de strings para valores numéricos Cadeia de Caracteres (string) 15/10/2007 Laboratório de Programação I 8 FUNÇÃO strlen( ) strlen(x); - onde X corresponde ao endereço de uma string, - retorna o valor inteiro que corresponde ao tamanho da string, sem contar o nulo ( \0 ). Exemplo: supondo a string x = “Joaquim” a função retornará 7 int tam; char nome[10] = “Joaquim”; // atribuindo uma string a variável tam = strlen(nome); // tam contém o tamanho da string : nome da string Cadeia de Caracteres – manipulando strings Algumas Funções de Manipulação de Strings A linguagem C não possui operadores que atuem sobre uma cadeia de caracteres, porém para facilitar a manipulação destas cadeias são disponibilizadas, por meio da diretiva #include <string.h>, funções que executam operações úteis, onde algumas delas serão apresentadas a seguir: 15/10/2007 Laboratório de Programação I 9 FUNÇÃO strcat( ) strcat(x,y); - concatena a primeira string com o valor da segunda; - segunda string (y neste exemplo) não é alterada; - primeira string (x) recebe o valor concatenado; - CUIDADO, pois esta função não verifica se a segunda string cabe no espaço vazio da primeira; Exemplo: suponha que seja necessário armazenar dois nomes em uma única variável, mas estes dois nomes já estão em outras duas variáveis. Assim tem-se que juntá-los, ou melhor dizendo, concatená-los em uma só variável. char nome1[20]=“Paulo”; // valor de uma string char y=nome2[10]=“Bernardo”; // valor de outra string strcat(nome1,nome2); // nome1 possui o valor da junção de nome1 com nome2 (Bernardo) =nome1 (PauloBernardo) : Cadeia de Caracteres – manipulando strings nome de uma string nome de outra string 15/10/2007 Laboratório de Programação I 10 Cadeia de Caracteres – manipulando strings FUNÇÃO strcpy( ) strcpy(x,y); - copia na primeira string o valor da segunda; - segunda string (y neste exemplo) não é alterada; - primeira string (x) sobrepõe o valor com a segunda; - CUIDADO, pois esta função não verifica se a segunda string (y) cabe no espaço declarado na primeira (x); Exemplo: suponha que seja necessário armazenar um mesmo nome em duas variáveis diferentes, mas este nome já está em uma das variáveis (em y). Assim tem-se que copiá-lo sobre uma outra variável. char nome1[20]=“Paulo”; // valor de uma string char nome2[10]=“Bernardo”; // valor de outra string strcpy(nome1,nome2) // nome1 fica com o valor da segunda string (Bernardo) : nome de uma string nome de outra string 15/10/2007 Laboratório de Programação I 11 FUNÇÃO strcmp( ) ou stricmp() strcmp(x,y); - esta função retorna um valor inteiro, resultante da diferença dos valores em ASCII dos dois primeiros caracteres diferentes das duas strings;- retornando o valor zero, as strings são idênticas; - retornando um valor inteiro diferente de zero para indicar que as strings não são iguais. Exemplo: suponha que seja necessário verificar se o valor de uma string (v_1) é igual ao valor de outra string (v_2). char v_1[10] = “casa”; char v_2[10] = “caso”; if (strcmp(v_1,v_2) = = 0) printf(“Strings iguais”); else printf(“Strings diferentes”); Cadeia de Caracteres – manipulando strings nome de uma string nome de outra string c a s a \0 c a s o \0 0 1 2 3 4 5 6 7 8 9 V_1 V_2 c a s a || || || || 99 97 115 97 c a s o || | || || 99 97 115 111 => o valor retornado pela função < 0 15/10/2007 Laboratório de Programação I 12 FUNÇÃO strstr Cadeia de Caracteres – manipulando strings strstr(x,y) devolve um ponteiro para primeira ocorrência de y na string x . Se y não for encontrada é retornado um ponteiro nulo (NULL); char str1[80], str2[80]; char *p; strcpy (str1, “isto e um pequeno teste ”); strcpy (str2, “um”); p = strstr(str1,str2); if (p){ printf(“ %s foi encontrado em %s na posicao %d \n”, str2, str1,p-str1); printf(“texto apos a string == %s\n”,p); } Saída do programa um foi encontrado em isto e um pequeno teste na posicao 7 texto apos a string == um pequeno teste 15/10/2007 Laboratório de Programação I 13 FUNÇÕES toupper( ) e tolower( ) Por meio da diretiva #include <ctype.h> pode-se usar outras funções para manipulação de caracteres, onde as que serão estudadas nesta aula são: Cadeia de Caracteres – manipulando strings toupper(x); - onde x corresponde a um único caractere; - retorna o caracter desejado em maiúsculo tolower(x); - onde x corresponde a um único caracter; - retorna o valor do caracter desejado em minúsculo Exemplo: supondo a variável x = ‘A’ que deverá ser apresentada nesta forma ou em minúsculo. char carac = ‘A’; printf(“Maiusculo=%c Minusculo=%c”,toupper(carac),tolower(carac)); Identificação de um caracter 15/10/2007 Laboratório de Programação I 14 atoi(x); - onde x corresponde ao endereço da string; - converte uma string em um número inteiro (int); - retorna o valor inteiro que corresponde ao valor inteiro da string informada. atol(x); - possui as mesmas características da função anterior, mas retorna o valor convertido da string para um valor inteiro longo (long int); atof(x); - possui as mesmas características da função anterior, mas retorna o valor convertido da string para um valor real (double/float); Exemplo: char DIA[5] = “10”; DIAS = atoi(DIA); int DIAS; printf(“Data = %d”,(DIAS + 3)); nome da string Cadeia de Caracteres – manipulando strings FUNÇÕES atoi( ) , atol( ) e atof( ) Também por meio da diretiva #include <stdlib.h> pode- se usar outras funções de manipulação de caracteres como: nome da string 15/10/2007 Laboratório de Programação I 15 Exercício de Fixação 1) Leia o nome completo de 2 pessoas e apresente o primeiro nome somente em letras maiúsculas e na linha seguinte, com uma tabulação, o segundo nome em letras minúsculas, solicitando outros nomes caso o usuário deseje. Somente devem ser usadas funções do padrão ANSI da linguagem C. 2) Desenvolva um programa que solicite o nome de cinco equipamentos de informática. Compare os cinco nomes fornecidos para verificar se existe algum solicitado em duplicidade e informe o usuário somente o nome duplicado. 3) Faça um programa que solicite o primeiro e o último nome de 5 pessoas. Assim que a pessoa informar os dois nomes, apresente em tela o tamanho de cada um deles e se for possível concatene-os em uma única variável fazendo o uso da função de concatenação de strings. 15/10/2007 Laboratório de Programação I 16 Exercício de Fixação 4) Elabore um programa que faça o armazenamento de um texto. Em uma janela limpa o texto deverá ser apresentada com todas as palavras tendo a sua primeira letra em maiúscula e o restante das letras em minúsculo. Após a apresentação de todo o texto centralize a linha na horizontal e escreva que este texto possui tantas palavras. 5) A identificação dos nomes de passageiros nas companhias de transporte aéreo são descritas obedecendo uma padronização, onde se deve primeiro escrever o último sobrenome e em seguida o primeiro nome, separando ambos por uma barra ‘/’. Por exemplo: Edson Arantes do Nascimento teria o seu nome escrito na passagem como: Nascimento/Edson. Faça um programa que leia onome completo de um passageiro e apresente-o na formatação dos transportes aéreos. 15/10/2007 Laboratório de Programação I 17 Exercícios de Fixação 6)Elabore um programa que armazene o nome completo de uma pessoa com até 30 caracteres e o apresente em letras maiúsculas centralizado em uma janela limpa. Na primeira coluna da linha 20 apresente quantos caracteres possui este nome e na linha 23 pergunte se o usuário quer informar outro nome. Caso deseje repita o processo até que o usuário não deseje mais ler nenhum nome e saia do programa IMEDIATAMENTE (sem pressionar qualquer tecla). 7)Faça um programa que armazene uma frase a ser transmitida aos candidatos da próxima eleição com até 50 caracteres. Após o armazenamento da frase, solicite o primeiro nome do candidato e transforme-o todo em maiúsculo, concatenando-o com a frase, além de dois pontos. O resultado deverá ser apresentado a partir da linha 5. Após a apresentação o programa deverá ser encerrado imediatamente após 10 segundos (ver função sleep). 15/10/2007 Laboratório de Programação I 18 Referência de Criação e Apoio ao Estudo Material para Consulta e Apoio ao Conteúdo • Universidade Federal de Minas Gerais - site ead1.eee.ufmg.br/cursos (escolha a opção ‘C’) • SCHILDT, H., C Completo e Total, Editora Makron Books do Brasil Editora Ltda, 1996. Capítulo 4 • EVARISTO, J., Aprendendo a programar programando em C, Book Express, 205 p., 2001. Capítulo 6 e 7 • MIZRAHI, V. V., Treinamento em Linguagem C, Curso Completo, Módulo 2, Makron Books do Brasil Editora Ltda,1990. Capítulo 7
Compartilhar