[Risolto] Conversione da carattere a numero intero

di il
17 risposte

[Risolto] Conversione da carattere a numero intero

Ciao a tutti!
Ho provato a fare un programmino che dovrebbe convertire uno o più caratteri nel loro valore numerico.
Il problema è che non funziona se voglio convertire più caratteri in quanto il valore finale è sempre zero

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

int main()
{
    int n;
    int ripeti;
    char scelta;
    int conversione;
    char lettera;
    int controllo;

        cout << "Convertitore da carattere a numero intero!" << endl;
        cout<<""<<endl;

 do{

       cout<<"Numeri di conversioni da fare"<<endl;
       cout<<"1 sola conversione premi a"<<endl;
       cout<<"2 o piu' conversioni premi b"<<endl;
       cout<<"Digita la lettera che indica la tua scelta: ";
       cin>>scelta;


    switch(scelta)
    {

        case 'a' :

        cout<<"carattere: ";
        cin>>lettera;

        n = lettera-48; //48 è 30h in assembly!

        cout<<"Il valore numero del carattere digitato e': "<<n<<endl;

        break;

        case 'b':

            char vettore[5];

        do{
            cout<<"Digita i caratteri: ";
            cin>>vettore;

             controllo= strlen(vettore);
             if(controllo>5)
                cout<<"Errore! Hai superato il limite consetito di 5"<<endl;

        }while(controllo>5);

             conversione = atoi(vettore);

           cout<<"Valore intero dei caratteri digitati e': "<<conversione<<endl;
        break;

        default:
            cout<<"Errore"<<endl;
    }

        cout<<"Ripetere il convertitore per un altra volta?[1=si/0=no]: ";
        cin>>ripeti;
        cout<<""<<endl;


  }while(ripeti==1);

    cout<<"Premi un tasto per uscire!"<<endl;

    return 0;
}

Questo è il programma che ho scritto...Grazie

17 Risposte

  • Re: [Risolto] Conversione da carattere a numero intero

    Ciao, secondo me hai interpretato male il significato della funzione atoi.

    Se tu le passi la stringa "1234" la funzione atoi restituisce 1234, cioè il numero milleduecentotrentaquattro. Se però le passi "abc" restituisce 0.
  • Re: [Risolto] Conversione da carattere a numero intero

    Ma effettivamente, quale stringa inserisci da convertire?
  • Re: [Risolto] Conversione da carattere a numero intero

    oregon ha scritto:


    Ma effettivamente, quale stringa inserisci da convertire?
    In effetti non è chiaro... Ho dato per scontato che fossero lettere perché dice che il risultato gli viene sempre 0, comunque aspettiamo ulteriori dettagli.
  • Re: [Risolto] Conversione da carattere a numero intero

    Allora grazie per avermi dedicato un minimo di attenzione.

    Torniamo al problema...
    la stringa è l'array che si chiama vettore(è un array di caratteri)

    A questo punto vorrei sapere a cosa serve questa istruzione allora...
  • Re: [Risolto] Conversione da carattere a numero intero

    Sì ma vorremmo sapere quali caratteri inserisci di preciso... Se metti delle lettere non funziona: solo numeri per la atoi!
  • Re: [Risolto] Conversione da carattere a numero intero

    Hai sprecato una risposta perché non hai chiarito cosa vorresti fare e quali dati fornisci in input.
    Supponiamo che la tua stringa é

    ciao

    In quale valore dovrebbe essere convertita?
  • Re: [Risolto] Conversione da carattere a numero intero

    Partiamo dal fatto che io ho ciccato in pieno la funzione dell'istruzione atoi in quanto pensavo che servisse per convertire stringhe in valori interi.

    Come hai inserisco la parola ciao
    Io pensavo che in pratica atoi mi permettesse di vedere il valore intero di ogni singola lettera che compone la parola ciao.

    Quindi in pratica l'unico modo è quello di sottrarre 48 al carattere e basta se voglio sapere il valore il valore sotto forma di un numero intero di un lettera?

    (In pratica togliere 48 sarebbe come togliere 30h in assembly giusto? )

    Spero di essere stato piu chiaro....
  • Re: [Risolto] Conversione da carattere a numero intero

    Allora... hai ragione sul fatto di dover operare su ogni singolo carettere della stringa, e hai ragione sul fatto che 48 = 30h (indipendentemente da assembly), però ancora non hai chiarito che cos'è per te il "valore numerico di una lettera"! E' il codice ASCII corrispondente? In questo caso, perché togliere 48, che corrisponde al carattere 0? Vedi questa tabella.

    Se vuoi il codice ASCII di una lettera, ti basta fare il cast a int. Invece se vuoi la corrispondenza
    a = 1 perché è la prima lettera
    b = 2 perché è la seconda
    c = 3 ...
    ...
    allora puoi sottrarre 'a' e aggiungere uno, quindi
    
    int numero = carattere - 'a' + 1;
    
    In ogni caso, io cercherei di evitare i cosiddetti "magic number", cioè quei numeri (come il tuo 48) che uno trova nel codice e non sa bene da dove vengono. Se proprio devi, usa '0'. Il motivo, oltre che di comprensibilità del codice, è che diverse macchine potrebbero usare diverse tabelle ASCII...
  • Re: [Risolto] Conversione da carattere a numero intero

    Stai attento ... 48 e 30h sono lo stesso numero in due sistemi di numerazione diversa e quindi è sbagliato dire "in assembly" ... semmai "in esadecimale"
  • Re: [Risolto] Conversione da carattere a numero intero

    Si in pratica io volevo che mettendo una parola restituisse per ogni lettera il suo valore intero che sarebbe quello della tabella ascii.
    Mi sono confuso dicendo assembly con esadecimale perché nel secondo quadrimestre stiamo facendo un po' di assembly 8086 con il prof di sistemi e quindi mi sono cofuso
  • Re: [Risolto] Conversione da carattere a numero intero

    La atoi è una funzione che converte da stringa a valore numerico intero corrispondente. Quindi converte una sequenza di caratteri come 1234 in un valore numerico intero pari a 1234.

    Quello che vuoi fare tu è convertire ogni carattere della stringa nel corrispondente ASCII e per farlo devi scrivere un semplice ciclo for che faccia quello che fai sul singolo carattere ma per ogni elemento della stringa. In pratica il codice del punto 1) con una for ...
  • Re: [Risolto] Conversione da carattere a numero intero

    Personalmente continuo a non capire perché voglia sottrarre 48, che è il codice di '0'. Capirei se si trattasse di convertire un carattere nel numero corrispondente, ad esempio
    9 = '9' - '0';
    Però se vuole solo il codice ASCII non basta fare il cast a int? Quindi
    int codice = (int) lettera;
  • Re: [Risolto] Conversione da carattere a numero intero

    Sì ... non è chiaro ... ma ovviamente se vuole il codice ASCII non deve sottrarre nulla ...
  • Re: [Risolto] Conversione da carattere a numero intero

    Ok, allora attendiamo chiarimenti da coppolino.

    @coppolino
    Se poi vuoi postare il tuo codice modificato, potremmo anche dare un'occhiata e vedere se tutto funziona...
Devi accedere o registrarti per scrivere nel forum
17 risposte