A maior rede de estudos do Brasil

Grátis
Estruturas_de_Dados_e_Algoritmos_em_C.erivanildo- Blog - conhecimentovaleouro.blogspot.com by @viniciusf666

Pré-visualização | Página 20 de 50

referenciada por z que consiste inteiramente de caracteres, 
respectivamente, presentes e não presentes, na cadeia de caracteres referenciada por zx. 
 
A função strpbrk localiza a primeira ocorrência, na cadeia de caracteres referenciada por z, 
de qualquer carácter presente na cadeia de caracteres referenciada por zx. O valor 
devolvido é a localização do carácter, ou o ponteiro nulo, caso nenhum carácter tenha sido 
encontrado. 
 
A função strstr localiza a primeira ocorrência, na cadeia de caracteres referenciada por z, da 
sequência de caracteres que constitui a cadeia de caracteres referenciada por zx. O valor 
devolvido é a localização da cadeia de caracteres, ou o ponteiro nulo, caso nenhum carácter 
tenha sido encontrado. Quando zx referencia uma cadeia de caracteres nula, ou seja, 
formado apenas pelo carácter nulo, o valor devolvido é z. 
 
A função strtok permite decompor por invocações sucessivas a cadeia de caracteres 
referenciada por z num conjunto de subcadeias de caracteres. A decomposição baseia-se no 
princípio de que a cadeia de caracteres original é formado por uma sequência de palavras 
delimitadas por um ou mais caracteres separadores descritos na cadeia de caracteres 
referenciada por zx. O conjunto dos caracteres separadores pode variar de invocação para 
invocação. 
 
A primeira invocação de strtok procura na cadeia de caracteres referenciada por z a 
primeira ocorrência de um carácter não contido na cadeia de caracteres referenciada por zx. 
Se tal carácter não existe, então não há palavras na cadeia de caracteres e a função devolve 
um ponteiro nulo. Se existir, esse carácter representa o início da primeira palavra. A seguir, 
a função procura na cadeia de caracteres a primeira ocorrência de um carácter contido na 
cadeia de caracteres separadores. Se tal carácter não existe, então a palavra actual estende-se 
até ao fim da cadeia de caracteres e as invocações subsequentes da função devolvem um 
 void *memchr (void *z, int c, size_t n); 
 char *strchr (void *z, int c); 
 char *strrchr (void *z, int c); 
 size_t strspn (char *z, char *zx); 
 size_t strcspn (char *z, char *zx); 
 char *strpbrk (char *z, char *zx); 
 char *strstr (char *z, char *zx); 
 char *strtok (char *z, char *zx); 
PROGRAMAÇÃO ESTRUTURAS DE DADOS E ALGORITMOS EM C 20 
ponteiro nulo. Se existir, esse carácter é substituído pelo carácter nulo e constitui o fim da 
palavra actual, cuja localização é devolvida pela função. Antes de terminar, porém, a função 
strtok armazena internamente a localização do carácter seguinte ao carácter nulo. Esta 
referência vai constituir o ponto de partida da próxima pesquisa que, para ser feita, exige a 
invocação da função com um ponteiro nulo em substituição de z. 
 
A Figura 2.32 apresenta um excerto de código da utilização da função strtok para 
decompor uma cadeia de caracteres constituída por palavras separadas pelos caracteres $ e 
#, e a Figura 2.33 apresenta a sua visualização gráfica. A primeira invocação da função 
detecta o início da primeira palavra a seguir à ocorrência do carácter #. Enquanto a função 
não devolver o ponteiro nulo, e o agregado de ponteiros para char tiver capacidade de 
armazenamento de informação, a função é invocada para encontrar o início da próxima 
palavra a seguir a um dos caracteres separadores. A segunda palavra começa a seguir ao 
carácter #, a terceira palavra começa a seguir ao carácter $ e a quarta palavra começa a 
seguir ao carácter #. Quando a função acaba de processar a frase, ela ficou decomposta em 
palavras, pelo que, ficou corrompida. 
 
 
Figura 2.32 - Exemplo da utilização da função strtok. 
'#' 'e' 'r' '\0' '#''a' 'u' 'm' 'a' 'v' 'e''\0' 'z' '\0' 'u' '\0' '\0''m'FRASE
FINAL
PALAVRA[0]
PALAVRA[1]
PALAVRA[2]
PALAVRA[3]
FRASE
INICIAL '#' 'e' 'r' '$' '#''a' 'u' 'm' 'a' 'v' 'e''$' 'z' '#' 'u' '$' '\0''m'
 
Figura 2.33 - Visualização gráfica do funcionamento da função strtok. 
A Figura 2.34 apresenta as funções diversas. 
 
 
Figura 2.34 - Funções diversas. 
 void *memset (void *z, int c, size_t n); 
 char *strerror (int errnum); 
 size_t strlen (char *z); 
 char FRASE[] = "#era$#uma$vez#um$"; char *PALAVRA[4], *PS; int N; 
 ... 
 N = 0; 
 PS = strtok (FRASE, "$#"); 
 while ( (PS != NULL) && (N < 4) ) 
 { 
 PALAVRA[N] = PS; 
 N++; 
 PS = strtok (NULL, "$#"); 
 } 
21 CAPÍTULO 2 : COMPLEMENTOS SOBRE C 
 
 
A função memset copia o valor c, previamente convertido para unsigned char, para os n 
primeiros bytes da região de memória referenciada por z. A função strerror devolve a 
mensagem associada com a variável global errno. A função strlen devolve o comprimento 
da cadeia de caracteres, ou seja, o número de caracteres armazenados até ao carácter nulo. 
 
A Figura 2.35 apresenta um exemplo da utilização da função strerror. Esta função devolve 
uma cadeia de caracteres que pode ser usada para escrever mensagens de erro associadas à 
variável global de erro. Neste exemplo, logo após a invocação da função matemática raiz 
quadrada, a variável global de erro é testada para em caso de erro escrever a mensagem 
respectiva no monitor através do printf. No cálculo de uma raiz quadrada, há erro se o 
valor de X for negativo, pelo que, nesse caso a mensagem indicará que o argumento X está 
fora da gama permitida para o cálculo da raiz quadrada. 
 
 
Figura 2.35 - Exemplo da utilização da função strerror. 
2.3.6 Conversão de cadeias de caracteres 
A biblioteca stdio contém funções de conversão de cadeias de caracteres. Para utilizar essas 
funções é preciso fazer a inclusão do ficheiro de interface stdio.h com a seguinte directiva do 
pré-processador. 
 
#include <stdio.h> 
 
A Figura 2.36 apresenta as funções de conversão, que permitem criar e decompor cadeias 
de caracteres. 
 
 
Figura 2.36 - Funções de conversão de cadeias de caracteres. 
A função sscanf decompõe uma cadeia de caracteres referenciada por z, segundo as regras 
impostas pelo formato de leitura indicado por formato, armazenando sucessivamente os 
valores convertidos nas variáveis, cuja localização é indicada na lista de ponteiros de 
variáveis. As definições do formato e da lista de ponteiros de variáveis são as mesmas que 
para as funções scanf e fscanf. 
 
A função sscanf é fundamentalmente equivalente a fscanf. A diferença principal é que a 
sequência de caracteres a converter é obtida da cadeia de caracteres referenciada por z, em 
vez de ser lida do ficheiro. Assim, a detecção do carácter nulo, que caracteriza a situação de 
se ter atingido o fim da cadeia de caracteres, vai corresponder à situação de detecção do 
carácter de fim de ficheiro. 
 int sscanf (char *z, const char *formato, lista de ponteiros); 
 int sprintf (char *z, const char *formato, lista de expressões); 
 #include <stdio.h> 
 #include <errno.h> 
 #include <math.h> 
 #include <string.h> 
 ... 
 errno = 0; 
 Z = sqrt (X); 
 if (errno != 0) /* se ocorreu uma situação de erro */
 { 
 printf("ERRO -> %s\n", strerror(errno)); 
 ... -> Numerical argument out of domain */ 
 } 
PROGRAMAÇÃO ESTRUTURAS DE DADOS E ALGORITMOS EM C 22 
A Figura 2.37 apresenta um exemplo da utilização da função sscanf para decompor uma 
cadeia de caracteres em subcadeias de caracteres. A cadeia de caracteres FRASE, que 
armazena uma data é decomposta nas suas componentes, CIDADE, DIA, MES e ANO, 
para posterior impressão no monitor com outro formato. 
 
 
Figura 2.37 - Exemplo da utilização da função sscanf. 
 
A função sprintf cria uma cadeia de caracteres referenciada por z, constituída por texto e 
pelos valores das expressões que formam a lista de expressões, segundo as regras impostas 
pelo formato de escrita, indicado por formato. As definições do formato e da lista de 
expressões são as mesmas que para as funções printf e fprintf. 
 
A função sprintf é fundamentalmente equivalente