Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE COMUNITÁRIA DA REGIÃO DE CHAPECÓ ACEA CURSO DE CIÊNCIA DA COMPUTAÇÃO Algoritmos e Estrutura de Dados I Apostila da Disciplina – Parte 5 INTRODUÇÃO A PROGRAMAÇÃO EM C – Parte 2 Prof. José Carlos Toniazzo Chapecó, 2011 Caracteres e Strings Em C é possível trabalhar, além de dados numéricos, com caracteres e strings. É importante notar que caractere é um tipo nativo da linguagem (char), enquanto string não. Na verdade uma string é um vetor de char, e esses conceitos serão analisados em maiores detalhes a seguir. Trabalhando com Caracteres FUNÇÃO PUTCHAR Sintaxe: putchar(var); A função putchar() exibe um caracter no monitor. Este caracter deve ser passado como parâmetro dentro dos parênteses, ou de forma direta (constante literal) ou através de uma variável do tipo caracter. Exemplo #include <stdio.h> #include <conio.h> int main(){ char letra; letra= 'R'; putchar(letra); putchar('o'); putchar('\n'); getch(); } FUNÇÃO GETCHAR Sintaxe: var = getchar(); Quando a instrução de getchar() é executada pela primeira vez, a execução do programa será interrompida até que o usuário tecle <Enter>. Durante a digitação será permitido ao usuário que este altere sua entrada através do <Backspace>. Ao terminar a digitação (<Enter> foi pressionado), o primeiro caracter será retornado para o programa e todos os demais (inclusive o caracter new line '\n' representado o <Enter>) ficarão no buffer de teclado. Nas próximas chamadas ao getchar() será testado se existe algum caracter no buffer, caso afirmativo, então irá tira-lo do buffer e retorná-lo para o programa. Caso não haja nenhum caracter no buffer então retorna-se ao procedimento normal (edição até que o <Enter> seja teclado). Exemplo #include <stdio.h> #include <conio.h> int main(){ char letra; letra=getchar(); while (letra!='\n') { putchar(letra); letra=getchar(); } getch(); } FUNÇÃO GETCHE Na função getche()os caracteres são disponibilizados para o programa assim que eles forem digitados, não sendo obrigatório teclar Enter. Desta forma, não se pode usar a tecla de Backspace para alterar uma entrada incorreta. O "sistema" acrescenta o caracter de retorno de carro (\r) à cadeia de caracteres quando for detectado que um Enter foi teclado. Ela se encontra na biblioteca CONIO.H. Exemplo #include <stdio.h> #include <conio.h> int main(){ char letra; printf("Voce quer Continuar? S ou N?\n"); letra=getche(); while ( letra!='S' && letra!='N' ) letra=getche(); if (letra=='S') printf("\nSua resposta foi SIM\n"); else printf("\nSua resposta foi NAO\n"); getch(); } FUNÇÃO GETCH A função getch() é semelhante à função getche(), porém, os caracteres lidos do teclado não são exibidos automaticamente no vídeo (sem eco). Uma boa utilização para getch() é na digitação de senhas. Exemplo #include <stdio.h> #include <conio.h> int main(){ char letra; printf("Digite sua senha e tecle ENTER\n"); while (letra!='\r') { letra= getch(); putchar('*'); } getch(); } É importante ressaltar que ao se trabalhar com caracteres individuais fazemos uso de aspas simples (‘ ‘). Trabalhando com Strings A linguagem C não possui nenhum tipo primitivo que permite a manipulação de cadeias de caracteres (strings). Desta forma, uma string em C é implementada através do uso de um vetor de caracteres terminado pelo caracter nulo. O caracter nulo tem configuração binária 0 (o seu código ASCII é 0), e é representado pela seqüência '\0'. Para armazenarmos uma string de até 10 caracteres escrevemos o comando char str[11]; Lendo e Escrevendo Strings A biblioteca padrão de E/S, stdio.h, fornece duas funções para E/S com strings. A função gets() lê uma string de caracteres do teclado e a coloca no endereço apontado pelo argumento passado (ponteiro para caracter). Os caracteres digitados são transferidos para a memória após um Enter. O Enter não se torna parte da string; em seu lugar é colocado o caracter nulo (‘\0’). Função gets(char *str); Neste protótipo str é um vetor de caracteres (ou um ponteiro qualquer para caracteres) que recebe os caracteres digitados pelo usuário. A função puts() escreve o seu argumento (uma string) na tela, seguida por um caracter de nova linha. Função void puts(char *str); A função puts() reconhece os mesmos caracteres de controle que a função printf() (por exemplo, ‘\n’). puts() pode escrever apenas strings de caracteres, não podendo escrever números ou fazer conversões de formato. Os comandos a seguir reexibem uma frase lida no monitor. char str[81]; gets(str); puts(str); A função scanf() pode ser utilizada para ler uma string usando o especificador de formato %s. O %s faz com que scanf() leia caracteres até que seja encontrado um caracter de espaço em branco. Os caracteres lidos são colocados em um vetor de caracteres apontado pelo argumento correspondente, e o resultado tem terminação nula (‘\0’). Para scanf(), um caracter de espaço em branco é: um espaço, ou um retorno de carro (Enter), ou uma tabulação. Logo, uma string como Alo Mundo! não pode ser lido com scanf() (apenas a substring Alo será carregado no vetor). A função printf() escreve uma string através do %s. Ao contrário da função puts(), não existe mudança automática de linha na exibição de uma string no vídeo. Podemos também ler uma string, caracter a caracter, através das funções getchar(), getch() ou getche(). Neste caso, é função do programador acrescentar um caracter ‘\0’ após a string. O código a seguir exemplifica o que foi dito acima. Exemplo #include <stdio.h> #include <conio.h> int main(){ char nome[81]; int i=0; printf("Informe um Nome\n"); nome[i]=getchar(); while(i<80 && nome[i]!='\n') { i++; nome[i]=getchar(); } nome[i]=NULL; puts(nome); getch(); } É importante lembrar que as funções gets() e scanf() recebem como parâmetro um ponteiro para uma área de memória. Logo, não temos controle sobre a quantidade de caracteres que será digitada pelos usuários, e sobre a área de memória que será utilizada para armazenar os caracteres lidos; já que o tamanho do vetor é estabelecido estaticamente. ALGUMAS OPERAÇÕES COM STRING: Uma string não é considerado um tipo básico em C (como int, char ou float), por isso operações como cópia (atribuição) ou comparação não são elementares. Sendo assim, em C existe a biblioteca string.h, que foi feita justamente para fazer algumas operações com strings. Essa biblioteca permite, por exemplo, utilizar as funções strcpy(destino,origem) que copia uma string da origem para o destino, e a função strcmp(string1,string2), que permite verificar se a string1 é igua a string2. Essas operações não podem ser feitas nativamente em C. Assim: nome = ”José” //isso não funciona, pois em C não existe variável do tipo string strcpy(nome, ”José”) //assim funciona, utilizando strcpy() da biblioteca string.h Operação Tipo Básico String Declaração int x, y; char str[81], aux[81]; Atribuição x = y; strcpy(aux, str); Comparação if (x == y) if (!strcmp(aux,str)) Função strcpy() A função strcpy() é usada para copiar o conteúdo de uma string (origem) para outra string (destino). Exemplo #include<stdio.h> #include<conio.h> #include<string.h> //biblioteca para trabalharcom strings em C int main() { char nome[50]="Joao da Silva",aluno[50]; strcpy(aluno,nome); printf("O nome do aluno e %s",aluno); getch(); } Ao ser executado, este programa exibirá no monitor o texto: O nome do aluno e Joao da Silva Função strcmp() A função strcmp() é usada para comparar lexicograficamente dois strings. Se as strings forem iguais, isto é, se str1 e str2 forem do mesmo comprimento e possuírem caracteres iguais nos elementos de mesmo índice, strcmp() retornará zero. Se str1 for lexicograficamente maior do que str2, a função strcmp() retornará um valor maior do que zero. Se str2 for lexicograficamente maior do que str1, a função strcmp() retornará um valor menor do que zero. Exemplo #include<stdio.h> #include<conio.h> #include<string.h> //biblioteca para trabalhar com strings em C int main() { char nome1[30],nome2[30]; printf("Digite o primeiro nome: "); gets(nome1); printf("Digite o segundo nome: "); gets(nome2); printf ("\nO numero de caracteres de %s eh %d", nome1, strlen(nome1)); printf ("\nO numero de caracteres de %s eh %d", nome2, strlen(nome2)); if(strcmp(nome1,nome2)== 0) printf("\n%s e igual a %s",nome1,nome2); else if(strcmp(nome1,nome2)>0) printf("\n%s vem depois de %s",nome1,nome2); else printf("\n%s vem depois de %s",nome2,nome1); getch(); } Após estes exemplos básicos de manipulação de caracteres e matrizes espera-se que o aluno seja capaz de conseguir fazer programas básicos utilizando estes recursos.
Compartilhar