View
19
Download
0
Category
Preview:
Citation preview
- Strings
Seguindo o raciocínio anterior, nomes destrings, são do tipo char*. Isto nos permiteexplorar os conceitos apresentados para resolverproblemas como, por exemplo, o apresentado no
Ponteiros
376
problemas como, por exemplo, o apresentado noexercício a seguir.
Exercício:
Construa um programa que declare um vetor destrings com 10 elementos e o inicialize comnomes fornecidos pelo usuário através da entradapadrão e em seguida o retorne na saída padrão.
Ponteiros
377
padrão e em seguida o retorne na saída padrão.A manipulação do vetor deve ser feita por meio deum ponteiro.
#include <stdio.h>#define tamanho 10#define comprimento_max 100main () {
char vetor_strings[tamanho][comprimento_max],*p;int i;for (i=0, p=vetor_strings[0]; i<tamanho; i++){
printf ("\nEntre com a string[%d]: ",i+1);
378
printf ("\nEntre com a string[%d]: ",i+1);scanf("%99[^\n]", p); /*caso seja necessário lembre-se de limpar o buffer de entrada*/p+=comprimento_max;
} printf ("\nString digitadas:");for (i=0, p=&vetor_strings[0][0]; i<tamanho;
p+=comprimento_max, i++)printf ("\nString[%d]: %s", i+1, p);
}
- Endereços de elementos de vetores
Nesta seção vamos apenas ressaltar, oumelhor, reforçar que a notação
&nome_da_variável[índice]
no caso de uma declaração do tipo
Ponteiros
379
no caso de uma declaração do tipo
tipo_elemento nome_da_variável[num_elementos];
é válida e retorna o endereço do ponto do vetor indexado por índice.
- Inicializando Ponteiros
Podemos inicializar, ponteiros de um jeito, nomínimo interessante.
Precisamos, para isto, entender como alinguagem C trata as strings constantes.
Toda string que o programador insere no
Ponteiros
380
Toda string que o programador insere noprograma é colocada num banco de strings que ocompilador cria. No local onde está uma stringconstante no programa, o compilador coloca oendereço do início daquela string (que está nobanco de strings).
- Inicializando Ponteiros (continuação)
É por isto que podemos usar strcpy() do seguinte modo:
strcpy (string,"String constante.");
Ponteiros
381
strcpy() solicita dois parâmetros do tipo char*.Como o compilador substitui a string "Stringconstante." pelo seu endereço no banco destrings, os argumentos da função strcpy() estãocoerentes.
- Inicializando Ponteiros (continuação)
O que isto tem a ver com a inicialização deponteiros?
É que, para uma string que vamos usar váriasvezes, podemos fazer:
Ponteiros
382
char *str1="String constante.";
Aí poderíamos, em todo lugar que precisarmosda string, usar a variável str1. Devemos apenastomar cuidado ao usar este ponteiro. Pois, se oalterarmos vamos perder a string e se o usarmospara alterar a string podemos facilmente corrompero banco de strings que o compilador criou.
- Inicializando Ponteiros (continuação)
OBS.: Em C existem modificadores de acesso,um exemplo é o modificador const que permitecriar uma constante.
Exemplo:
Ponteiros
383
const int numero = 32;
Logo, podemos fazer:
const char *str1="String constante.";
Desta forma o endereço apontado pelo ponteironão pode ser alterado.
Ponteiros / Vetores e Strings
Agora podemos concluir nosso estudo dasFunções Básicas para manipulação de Strings.
- strstr
Sua forma geral é:
384
char *strstr (const char *str1, const char *str2);
A função strstr() devolve um ponteiro para aprimeira ocorrência da string apontada por str2 nastring apontada por str1. Ela devolve um ponteironulo se não for encontrada nenhuma coincidência.Obs.: Função presente em string.h.
Ponteiros / Vetores e Strings
/* Exemplo strstr */
#include <stdio.h>
#include <string.h>
main()
{
385
{
char *p;
p = strstr(“isto é um teste”, “te”);
puts(p);
}
Exercício:
Construa um programa que receba duas stringsfornecidas pelo usuário, verifique se a segundastring está presente na primeira e, caso estejaretorne a posição do caractere na primeira string
Ponteiros / Vetores e Strings
386
retorne a posição do caractere na primeira stringonde a primeira ocorrência da segunda stringinicia, caso contrário retorne zero.
Ponteiros / Vetores e Strings
- strchr
Sua forma geral é:
char *strchr (const char *str, int ch);
A função strchr() devolve um ponteiro à primeira
388
A função strchr() devolve um ponteiro à primeiraocorrência do byte menos significativo de ch nastring apontada por str. Se não for encontradanenhuma coincidência, será devolvido um ponteironulo.
Ponteiros / Vetores e Strings
/* Exemplo strchr */
#include <stdio.h>
#include <string.h>
main()
{
389
{
char *p;
p = strchr(“isto eh um teste”, ‘ ’);
printf(p);
}
- Vetores de ponteiros
Podemos construir vetores de ponteiros comodeclaramos vetores de qualquer outro tipo.
Um exemplo de declaração de um vetor deponteiros inteiros é:
Ponteiros
390
ponteiros inteiros é:
int *pmatrx [10];
No caso acima, pmatrx é um vetor quearmazena 10 ponteiros para inteiros.
- Ponteiros para Ponteiros
Podemos declarar um ponteiro para um ponteiro com a seguinte notação:
tipo_da_variável **nome_da_variável;
Ponteiros
391
Algumas considerações:
**nome_da_variável é o conteúdo final davariável apontada;
*nome_da_variável é o conteúdo do ponteirointermediário.
- Ponteiros para Ponteiros (continuação)
Na linguagem C podemos declarar ponteirospara ponteiros para ponteiros, ou então, ponteirospara ponteiros para ponteiros para ponteiros eassim por diante.
Ponteiros
392
assim por diante.
Para fazer isto basta aumentar o número deasteriscos na declaração.
Para acessar o valor desejado apontado por umponteiro para ponteiro, o operador asterisco deveser aplicado duas vezes, como mostradoanteriormente e no exemplo a seguir:
- Ponteiros para Ponteiros (continuação)
#include <stdio.h>main(){
float pi = 3.1415, *pf, **ppf;
Ponteiros
393
float pi = 3.1415, *pf, **ppf;pf = πppf = &pf;printf(“\n%.4f", **ppf);printf(“\n%.4f", *pf);
}
Exercício:
Verifique o programa abaixo. Encontre o(s)seu(s) erro(s) e corrija-o(s) para que o mesmoescreva o número 10 na tela.
#include <stdio.h>
Ponteiros
394
#include <stdio.h> main() {
int x, *p, **q; p = *x; q = &p; x = 10; printf("\n%d\n", &q);
}
Funções são as estruturas que permitem aousuário separar seus programas em blocos(subprogramas). Para fazermos programas grandese complexos temos de construí-los bloco a bloco.
Uma função na linguagem C tem a seguinte forma
Funções
395
Uma função na linguagem C tem a seguinte formageral:
tipo_de_retorno nome_da_função (declaração_de_parâmetros)
{ corpo_da_função
}
O tipo-de-retorno é o tipo de variável que a funçãovai retornar. O default é o tipo int, ou seja, o tipo-de-retorno assumido por omissão. A declaração deparâmetros é uma lista com a seguinte forma geral:
tipo nome1, tipo nome2, ... , tipo nomeN
Observe que o tipo deve ser especificado para
Funções
396
Observe que o tipo deve ser especificado paracada uma das N variáveis de entrada. É nadeclaração de parâmetros que informamos aocompilador quais serão as entradas da função(assim como informamos a saída no tipo-de-retorno).
É no corpo da função que as entradas sãoprocessadas, saídas são geradas ou outrasoperações são executadas.
- Comando return
Forma geral:
return valor_de_retorno; ou return;
Funções
397
Quando se executa uma declaração return afunção é encerrada imediatamente e, se o valor deretorno é informado, a função retorna este valor. Éimportante lembrar que o valor de retornofornecido tem que ser compatível com o tipo deretorno declarado para a função.
- Comando return (exemplo 1)
#include <stdio.h>int Square (int a){
return (a*a);}main (){
398
{int num;printf ("\nEntre com um numero: ");scanf ("%d",&num);num=Square(num);printf ("\n\nO seu quadrado vale: %d\n",num);
}
- Comando return (exemplo 2)
#include <stdio.h>int Square (int a){
return (a*a);}main (){
399
{int num;printf (“\nEntre com um numero: ");scanf ("%d",&num);printf ("\n\nO seu quadrado vale: %d\n", Square(num));
}
Recommended