Implemente as seguintes funções retiradas de enunciados de exames.

3.13int atoi(char *s)/* Array to Integer */

Recebe uma string e devolve o inteiro que nela está representado.

atoi (“1234”) 1234

atoi (“-123abc” -123

atoi (“+51ab46”) 51

atoi (“abc”) 0

Passo 1

Fala aí! Essa aqui pode dar um pouquinho de trabalho, mas desanima não que no final dá tudo certo. Logo de cara, podemos encontrar um problema se declararmos a função como o enunciado nos pediu, pois, como atoi é uma função nativa de alguma biblioteca, o compilador nos indica um conflito de declarações. Por isso, escolhi mudar o nome da minha função para AtoI, isso já é suficiente para ela ser considerada uma nova.

Dito isso, bora começar definindo nossas variáveis:

Vamos utilizar i e j como índices para nossas strings, n foi declarada como uma constante igual ao comprimento da string inicial e declarei ainda a string de saída na linha 10, a que vai conter somente os números. Aquele malloc é uma instrução responsável por indicar a quantidade de memória necessária para armazenar certa informação de forma dinâmica, como aqui queremos criar uma string final, e, a princípio, a única informação que temos a respeito de seu tamanho é que ele deve ser no máximo igual ao da inicial, devemos recorrer a esse recurso.

Passo 2

Beleza, agora, vamos abrir um laço for para percorrer por nossa string e, dentro dele, abrimos um if da seguinte forma:

Ali na condição do if aparece um termo que talvez seja novo pra você: é o isdigit. Isso é uma função bem conveniente que é capaz de identificar se um termo é um dígito (0 – 9) ou não. Para usá-la devemos escrever aquele #include ctype.h> lá no começo do programa.

Então, nossa sintaxe da linha 14 à 18 fica mais ou menos assim:

Se (o caractere s[i] for numérico ou se ele for o caractere ‘-‘)

Faça-o igual ao caractere string_final[j];

Incremente j;

Pra finalizar, é sempre importante não esquecer de colocar o caractere delimitador \0 ao final da string e retornar a informação que queremos quando chamamos a função lá no main.

Resposta