Oppure

Loading
03/02/11 15:36
djandry89
Salve a tutti,
sono nuovo del forum e per prima cosa volevo complimentarmi con chi nutre questo spazio così bene, di informazioni utili alla programmazione, in modo molto chiaro ed esauriente.

Sto realizzando un programmino (c++ console) per poter calcolare il CHECK DIGIT dei numeri raccomanda sia a 13 che a 8 cifre. Questi numeri raccomandata possono essere inseriti tramite input tastiera oppure importando un file stream esterno.

Ho fatto in modo che i numeri inseriti vadino a finire all'interno di un array CHAR (in modo da poter far fare l'inserimento da tastiera continuo senza spazi tra loro e su stessa riga). Ora per poter operare con le singole cifre di ogni numero raccomandata (per applicare l'agloritmo), dovrei convertire i dati CHAR in dati INT.

--
Praticamente ecco un esempio:

_numero raccomandata 14158201839 immesso in array CHAR
_1,4,1,5,8,2,0,1,8,3,9 in un array INT per poterne eseguire l'algoritmo con le singole cifre
--

Cosa posso fare?

C'è qualche funzione delle librerie standard di windows applicabile?

Ringrazio anticipatamente e aspetto una soluzione possibilmente :-)
Ultima modifica effettuata da djandry89 03/02/11 15:43
aaa
03/02/11 16:52
for(int i=0;i<dim_array;i++)
    array_int[i]=array_char[i]-48;//perché facendo array_int[i]=array_char[i], array_int[i] assumerebbe come valore il codice ascii del numero, dato che i numeri nella tabella ascii vanno da 48 a 57, sottraendo 48 trovi il valore numerico

spero di aver colto il problema...
03/02/11 18:36
carlduke
puoi anche fare

for(int i = 0;i < dim_array;i++)
  array_int[i] = atoi(&array_char[i]);


devi inludere string.h
aaa
03/02/11 18:58
lumo
Postato originariamente da carlduke:

puoi anche fare

for(int i = 0;i < dim_array;i++)
  array_int[i] = atoi(&array_char[i]);


devi inludere string.h

non proprio perchè, sebbene in aluni casi funzioni, atoi vuole una stringa, che deve essere terminata da 0... e poi si trova in stdlib.h( cstdlib) non in string.h
aaa
03/02/11 18:59
Pitagora
Postato originariamente da carlduke:
devi inludere string.h


:nono: la funzione atoi() risiede nell'header stdlib.h ;)
aaa
03/02/11 19:27
la funzione atoi serve ad inserire il contenuto di un array di char in una sola variabile di tipo int, per cui se nell'array di char ha {1,2,3} potrà soltanto fare una variabile intera contenente 123, a lui credo serva un'array di interi che sia "uguale" all'array di char, cioè l'array dovrà contenere{1,2,3}...
03/02/11 19:30
carlduke
Postato originariamente da Pitagora:

Postato originariamente da carlduke:
devi inludere string.h


:nono: la funzione atoi() risiede nell'header stdlib.h ;)


sisi scusate ho avuto un momento di confusione :_doubt:
aaa
04/02/11 9:59
djandry89
Avevo già provato col metodo macchina:

for(int i=0;i<12;i++){
vett[i]=vett_temp[i]-48;
}

Ma purtroppo mi da qualche errore di conversione penso.

Ora posto la parte di codice che si occupa della conversione così magari riuscite a capire dove sbaglio :(

NEL MAIN:

"racc_temp" è l'array char temporaneo per l'inserimento in input
"racc" è l'array int dove devono andare a finire le cifre convertite in INT
"scelta" è una variabile char che mi dice da quante cifre è formato il numero raccomandata

cout<<"Inserisci le 11 cifre della raccomandata: ";
cin.getline (racc_temp,12);
converti(racc_temp,scelta,racc);
cout<<"CHECK DIGIT: "<<calcola_check(racc,check)<<endl<<endl;
stampa_racc(racc,check,scelta); cout<<"-"<<check<<endl<<endl;

FUNZIONE "CONVERTI":

void converti(char vett_temp[], char scelta[], int vett[]){
for(int i=0;i<12;i++){
vett[i]=vett_temp[i]-48;
}

}

RISULTATO A VIDEO:

Inserisci le 11 cifre della raccomandata: 14158201839
Check Digit: 6
-> 0x22ff10-6

(Ovviamente il Check Digit 6 è errato perchè non mi viene riconosciuto l'INT nelle cifre)

Dove sbaglio????
Ultima modifica effettuata da djandry89 04/02/11 10:03
aaa