Funzione di conversione da alfanumerici a numerici - esempi in C
Tutti i linguaggi di programmazione hanno funzioni per convertire alfanumerici che rappresentano interi in interi.
Quando digitate sulla testiera la sequenza di caratteri '1' '2' e '3' questi vengono convertiti nella rispettiva codifica binaria in base alla tabella ad esempio ASCII. Quindi il carattere '1' verrĂ codificato in un byte con il valore binario di 49 decimale, il carattere '2' in un byte con il valore binario di 50 decimale e 3 in un byte con il valore binario di 51 decimale.
Quindi:
La sequenza 123 viene codificata in 3 byte
uno per ogni carattere, in base alla codifica ASCII:
| 49| 50| 51|
in binario:
|00110001|00110010|00110011|
E' necessario per eseguire i calcoli è necessario convertire questa sequenza di caratteri nell'intero corrispondente. Tutti i linguaggi di programmazione hanno delle funzioni che permettono questa conversione, ad esempio in C la funzione atoi:
int atoi (const char * str);Converte una sequenza di caratteri in un intero.
Un esempio di utilizzo:
/* atoi example */
#include <stdio.h> /* printf, fgets */
#include <stdlib.h> /* atoi */
int main ()
{
int i;
char buffer[256];
printf ("Enter a number: ");
fgets (buffer, 256, stdin);
i = atoi (buffer);
printf ("The value entered is %d. Its double is %d.\n", i, i*2);
return 0;
}L'output:
Può essere utile fare una nostra implementazione semplice della funzione atoi per capire come convertire una sequenza di caratteri che rappresentano un intero in una variabile di tipo intero.
Sotto una semplice implementazione:
Una implementazione un più controlli sull'input e che gestisca i negativi. Se il primo carattere è '-' allora setta il segno a negativo e converte il testo della sequenza di caratteri (stringa) come numero utilizzando l'approccio precedente e poi moltiplicando il risultato per il segno:
Vedi sotto altre implementazioni della funzione atoi(), piĂą "robuste".
Altre implementazioni della funzione atoi
Questa implementazione gestisce vari tipi di errore. Se str è NULL o str non contiene caratteri numerici allora ritorna 0 come numero non valido.
L'output:
Un'ultima implementazione, che gestisce i quattro casi limite:
Scarta tutti gli spazi iniziali, eventuali;
Il segno del numero;
l'overflow;
Gli input invalidi;
Per rimuovere gli spazi iniziali si esegue un loop finché un carattere di tipo cifra è raggiunto. Se il numero è più grande o uguale a INT_MAX/10, allora ritorna INT_MAX se il segno è positivo o INT_MIN se il segno è negativo. Negli altri casi è gestito come in precedenza.
Simulazione del comportamento con un dato di input:

L'implementazione:
L'output:
Complexity Analysis for all the above Approaches:
Time Complexity: O(n). Only one traversal of string is needed.
Space Complexity: O(1). As no extra space is required.
Convertire da intero a sequenza di caratteri
Nel linguaggio C, la funzione itoa, esegue la funzionalità inversa, cioè converte un intero nella corrispondente sequenza di caratteri ASCII.
Esempio di utilizzo della funzione:
L'output:
Siccome in C itoa non è una funzione dello standard C non è presente in molti compilatori (contrariamente ad atoi che fa parte dello standard C).
Si può utilizzare la funzione sprintf come alternativa a itoa. E' solo la metà buona come la funzione itoa perché non si può specificare la base a cui convertire il numero.
sprintf prende tre argomenti.
Il primo deve essere una variabile di tipo char *, che significa che tu puoi utilizzare un array di char, ma bisogna che sia abbastanza grande da contenere il numero convertito.
Il secondo argomento è la stringa contenente la specifica del formato, dipendendo sul formato del numero che si vuole convertire.
Il terzo argomento è il numero che si vuole convertire a stringa.
sprintf ritorna il numero di caratteri della stringa (senza però il carattere null).
Questo esempio converte alcuni numeri in formato stringa, a stampa in output il risultato:
L'output:
Una nostra implementazione di itoa potrebbe essere:
Output:
Last updated
Was this helpful?