PDA

View Full Version : [C++] - posizionare le cifre di un intero in un array


RagingBull
05-06-2008, 15:28
ciao a tutti,

mi sto avvicinando al c++ e volevo sapere come è possibile trasformare un dato di tipo integer in un array. ad esempio:

int cifra;
int arr[3];

cifra=123;

dopo la conversione dovrei ottenere come risultato:

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

grazie anticipatamente per l'aiuto!

RagingBull
05-06-2008, 15:55
uhm....quindi esempio pratico col mio 123 verrebbe:

123/100=1

(123-(123/100)*100)/10=2

(123-(123/10)*100)/10=3

di volta in volta poi le prendo e le metto nell'array...quando si dice la soluzione più semplice e non ci si arriva :muro:

ti ringrazio! :)

gugoXX
05-06-2008, 17:09
Io passerei dalla rappresentazione in stringa ottenuta con la funzione
itoa
che mi sembra piu' esente da errori che moduli divisioni etc.

RagingBull
05-06-2008, 17:34
si, in effetti "giocando" con le operazioni mi sono reso conto che i controlli da fare sono parecchi.

esattamente qual'è la sintassi per la funzione itoa? molto probabilmente vado a risparmiare parecchie righe di codice.

gugoXX
05-06-2008, 17:43
Le sintassi delle funzioni le trovi anche con google...
Comunque la itoa non e' standard. Anche se ce l'hanno tutti i compilatori che ho incontrato.
Al limite, dato che usi proprio la base 10, andrebbe altrettanto bene sprintf


itoa(valore,stringa,base)


char stringa[8]; // stringa destinazione. E' lunga abbastanza?
// Per gli interi senza segno 8 basta

//Qui ti ritrovi la stringa riempita.
itoa(valore,stringa,10);

int risultato[8];

for (int t=0;t<8;t++)
{
char carattere=stringa[t];
if (carattere==0) break;
// Per passare da un carattere che contiene un numero
// alla sua rappresentazione decimale
// e' sufficiente sottrarre '0'.
risultato[t]=(int)(carattere - '0');
}



Giusto come paragone in C# (ma anche in Python non e' tanto diverso), la stessa cosa diventa cosi'


int valore = 5885;
var risultato = valore.ToString().ToCharArray().Select(u => u-'0');

RagingBull
05-06-2008, 18:00
perfetto, la provo subito!

grazie ancora!!!