Escreva uma função eficiente para implementar itoa()
função em C. O padrão itoa()
A função converte o número de entrada em sua string C correspondente usando a base especificada.
Protótipo:
O protótipo do itoa() é:
char* itoa(int value, char* buffer, int base);
Parâmetros:
valor – Valor a ser convertido em uma string.
amortecedor – Array para armazenar a string terminada em nulo resultante.
base – Base numérica utilizada para representar o valor como uma string, entre 2 e 36.
Valor de retorno:
Um ponteiro para a string terminada em nulo resultante, igual ao buffer de parâmetro.
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#include <stdio.h> #include <stdlib.h> // Função para trocar dois números void swap(char *x, char *y) { char t = *x; *x = *y; *y = t; } // Função para reverter `buffer[i…j]` char* reverse(char *buffer, int i, int j) { while (i < j) { swap(&buffer[i++], &buffer[j--]); } return buffer; } // Função iterativa para implementar a função `itoa()` em C char* itoa(int value, char* buffer, int base) { // entrada inválida if (base < 2 || base > 32) { return buffer; } // considera o valor absoluto do número int n = abs(value); int i = 0; while (n) { int r = n % base; if (r >= 10) { buffer[i++] = 65 + (r - 10); } else { buffer[i++] = 48 + r; } n = n / base; } // se o número for 0 if (i == 0) { buffer[i++] = '0'; } // Se a base for 10 e o valor for negativo, a string resultante // é precedido por um sinal de menos (-) // Com qualquer outra base, o valor é sempre considerado sem sinal if (value < 0 && base == 10) { buffer[i++] = '-'; } buffer[i] = '\0'; // string de terminação nula // inverte a string e retorna return reverse(buffer, 0, i - 1); } // Implementa a função itoa em C int main(void) { char buffer[33]; int value[] = { 11184810, -25, 64, 127 }; int base[] = { 16, 10, 8, 2 }; for (int i = 0; i < 4; i++) { printf("itoa(%d, buffer, %d) = %s\n", value[i], base[i], itoa(value[i], buffer, base[i])); } return 0; } |
Resultado:
itoa(11184810, buffer, 16) = AAAAAA
itoa(-25, buffer, 10) = -25
itoa(64, buffer, 8) = 100
itoa(127, buffer, 2) = 1111111
Isso é tudo itoa()
implementação em C.
Postagem relacionada: