Cadeia de Caracteres - Funções de Conversão

Este post faz parte da série Cadeia de Caracteres. Leia também os outros posts da série:

A biblioteca <stdlib.h> possui algumas funções de conversão de Strings que podemos utilizar no desenvolvimento dos nossos programas. Com essas funções é possível converter Strings em valores inteiros ou de ponto flutuante, o que pode ser útil em algumas situações. Vamos estudar hoje como funcionam algumas dessas funções.

 

Função atof

 

O protótipo da função é

double atof ( const char *pN );

 

Essa função permite converter a string pN em double, onde pN é um ponteiro para uma constante de caractere. Essa função retorna um valor double e, caso o valor convertido não puder ser representado, o comportamento da função será indefinido. A string aqui representa um número em ponto flutuante. Vejamos um exemplo:

 

 

Funções de Conversão - Saída no console da função atoi
Figura 1: Saída no console da função atoi

 

O que é importante frisar aqui é que, se você digitar um caractere, ou até mesmo um nome, a função não conseguirá fazer a conversão. Esta função converte apenas strings que podem ser reconhecidas como números.

 

Função atoi

 

O protótipo da função é:

int atoi ( const char *pN );

 

Essa função converte a string pN em um inteiro, onde pN é um ponteiro para uma constante de caractere. Retorna um valor inteiro e a string é composta por dígitos que representam um inteiro. Funciona da mesma forma que a função atof, a diferença entre essas funções é que esta aqui trabalha apenas com reconhecimento de números inteiros, enquanto que a atof reconhece números de ponto flutuante. Vejamos um exemplo:

 

 

Funções de Conversão - Saída no console.
Figura 2: Saída no console.

 

Novamente, se você digitar uma letra, consoante, vogal, etc., a função não retornará nenhum valor para você, e o comportamento na verdade será inesperado.

 

Função atol

 

O protótipo da função é:

long atol ( const char *pN );

 

Essa função converte a string pN em um tipo long int, onde pN é um ponteiro para uma constante de caractere. Retorna um valor long e a string é composta por dígitos que representam um inteiro longo. Mais uma vez, o comportamento é igual ao das funções anteriores. Vamos ver o exemplo:

 

 

Saída no console
Figura 3: Saída no console

 

Tente digitar um número muito grande, você perceberá que não será possível fazer a conversão, pois os resultados que serão apresentados no console estarão errados.

 

Função strtod

 

O protótipo da função é

 

double strtod ( const char *pN, char **eP );

 

O objetivo dessa função é converter uma sequência de caracteres que representam um valor em ponto flutuante em double. O primeiro argumento desta função é uma string (char *pN) e o segundo argumento é um ponteiro de uma string (char **eP). Se você não leu os artigos sobre ponteiros, então, antes de continuar aqui, volte para esses artigos e, somente após terminar essa série, volte para cá. Para entender um pouco melhor sobre como funciona esta função, vamos ver um exemplo:

 

 

Saída no console.
Figura 4: Saída no console.

 

Bom, como você pode notar, essa função permite pegar uma string que tem uma representação numérica, em parte de um texto, diferente das outras funções, que só permitiam a própria string do número. Na linha X é declarada a variável do tipo double que vai guardar o resultado da conversão. Em seguida, na linha Y, é declarada a variável do tipo string, isto é, a cadeia de caracteres que vai guardar o texto digitado e, por fim, na linha Z é declarado o ponteiro para a string. Esse ponteiro recebe o endereço do lugar ocupado pelo primeiro caractere que vem imediatamente após a parte convertida da string. Para ficar ainda mais claro, o programa do exemplo imprime os conteúdos de string, pString e valor.

 

Função strtol

 

O protótipo da função é:

 

long strtol ( const char *pN, char **eP, int base );

 

Essa função tem como objetivo converter uma sequência de caracteres que representa um inteiro em um long, mas observe que ela exige três parâmetros. O primeiro argumento desta função (pN) é uma string, que contém a cadeia de caracteres propriamente dita. O segundo argumento é um ponteiro para a string, que contém o endereço do lugar ocupado pelo primeiro caractere que vem imediatamente após a parte convertida da string. O último argumento é um inteiro que especifica a base numérica do valor que está sendo convertido (binária, octal, hexadecimal, decimal, etc.). Vamos ver um exemplo:

 

 

Saída no console da função strtol
Figura 5: Saída no console.

 

Essa função é bem parecida com a strtod, com a diferença de que aqui estamos trabalhando com inteiros longos e em strtod trabalhamos com double. O segundo argumento da função recebe sempre o restante da string e, se você o setar como NULL, a função vai ignorar o resto da string. O terceiro argumento também pode ser setado com valores diferentes de zero, desde que estejam entre 2 e 36.

 

Função strtoul

 

O protótipo da função é:

 

unsigned long strtoul ( const char *nP, char ** eP, int base ) ;

 

O objetivo desta função é o de converter a sequencia de caracteres que representam um inteiro do tipo unsigned long em um número do tipo unsigned long. Esta função também solicita três parâmetros, sendo o primeiro uma string, o segundo um ponteiro para a string e o terceiro a base numérica, igual à função anterior. O comportamento, inclusive, desta função é parecido com o da função anterior. Vamos ver o exemplo:

 

 

Saída do console da função strtoul
Figura 6: Saída do console

 

Neste exemplo eu declaro uma cadeia de caracteres, um ponteiro para caractere e uma variável do tipo unsigned long. Observe que a função utiliza essas variáveis como parâmetros e, no teste do programa, digitei uma string que mistura números e letras. A função conseguiu separar o que é número do que é letra, retornando, assim, o valor correto. Além disso o ponteiro armazena o restante da string, que foi separada do número, e o seu conteúdo é impresso também.

 

Saiba mais

 

Estilo de código - Boas práticas de programação em linguagem C

Estruturas Aninhadas

Ponteiro em C: Funções

 

 

Conclusão

 

Por hoje é só tudo isso pessoal! As funções estão aí, disponíveis, para serem utilizadas. Agora você já sabe o que fazer quando precisar ler uma string e obter dela um valor. Espero que este artigo tenha sido útil pra você. Tem dúvidas? Deixe aí nos comentários, ok!? Fiquem ligados pois ainda há mais artigos para esta série, está bom!? Muito Obrigada.

Outros artigos da série

<< Cadeia de Caracteres: Funções de Entrada e Saída
Este post faz da série Cadeia de Caracteres. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Elaine Cecília Gatto
Bacharel em Engenharia de Computação. Mestre em Ciência da Computação. Doutoranda em Ciência da Computação. Co-fundarora e Líder das #GarotasCPBr. Pesquisadora Convidada no Grupo de Pesquisa: "Artes em Tecnologias Emergentes" do Programa de Pós Graduação em Design na UNESP Campus Bauru. Cantora, Docente no Magistério Superior, Geek, Nerd, Otaku e Gamer. Apaixonada por Michael Jackson, Macross, Rocky Balboa, Séries, Filmes, Cervejas e Vinhos. Mais informações sobre mim você encontra em: http://lattes.cnpq.br/8559022477811603.

Deixe um comentário

avatar
 
  Notificações  
Notificar