Vamos para o enunciado:
Veja um exemplo de um programa que mostra o valor de retorno de atoi: $>./a.out " ---+--+1234ab567"
- Escreva uma função que converta o início da cadeia apontada por str em inteiro do tipo int
- str pode começar por um número arbitrário de ’white space’ (como definido por isspace(3))
- str pode então ser seguido por um número arbitrário de sinais + e sinais -. O sinal - vai mudar o sinal do inteiro retornado em função do número de sinais - e se este for par ou ímpar.
- Por fim, str deverá ser composta por número da base 10
- Sua função deverá ler str desde que esta siga as regras acima e ela deve retornar o número encontrado até então.
- Você não deve considerar os overflows e os underflows, o resultado é considerado indefinido nesses casos.
- Você pode comparar sua função com a verdadeira função atoi, exceto a parte dos sinais bem como do overflow.
-1234
Ela deverá ser prototipada da seguinte maneira:
int ft_atoi(char *str)
A função atoi (alpha to intenger) original faz como o nome sugere, transforma uma string em um int. A ft_atoi é como o atoi com regras de sinais -u-
Vamos ao código por partes. Primeiro criei uma função para verificar se um caracter é um espaço, já que a função deve ignora-los. A função is_space ficou:
int is_space(char c){ |
É importante ressaltar que além do ' ' há outras formas de indicar espaço como o '\n' e o '\v', para saber mais consulte man 3 isspace.
Agora as próximas funções, uma foi criada para verificar se um caracter é um operador (+ ou -) e a outra para verificar se é um número (0 à 9). Ficaram assim:
Agora as próximas funções, uma foi criada para verificar se um caracter é um operador (+ ou -) e a outra para verificar se é um número (0 à 9). Ficaram assim:
int is_operator(char c){E por fim chegamos no ft_atoi, que ficou assim:
if (c == '+' || c == '-') return (1);
return (0);
}
int is_number(char c){
if (c >= '0' && c <= '9') return (1);
return (0);
}
int ft_atoi(char *str) |

Nenhum comentário:
Postar um comentário