Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    5

    [C++] conversione da char a int

    Salve a tutti, sono nuova del forum, cmq ho un problema.
    Praticamente effettuo uno split su char oraShift[]="08-16"; nel modo seguente.
    char* pch;
    pch = strtok(oraShift, "-");

    Se provo a stampare come segue mi viene restituito il valore commentato.
    cout << "pch0"<< pch[0] << "\n"; //0
    cout << "pch1"<< pch[1] << "\n"; //8
    cout << "pch3"<< pch[3] << "\n"; //1
    cout << "pch4"<< pch[4] << "\n"; //6

    Ora io vorrei trasformare i valori che ho in pch[0] in interi, come faccio?
    Ho provato nel seguente modo
    int i=int(pch[0]);
    ma non funziona. Sapete aiutarmi?

    Andrebbe bene anche se da quei valori riuscissi a crearmi due stringhe, una con 08 e l'altra con 16 e poi converto quelle.

    Spero di essere stata chiara. Grazie a tutti per le risposte.

  2. #2
    credo che con una semplice funzione atoi(int n) risolvi il problema...

    http://www.cplusplus.com/reference/c.../cstdlib/atoi/

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    5
    Originariamente inviato da barrelshock
    credo che con una semplice funzione atoi(int n) risolvi il problema...

    http://www.cplusplus.com/reference/c.../cstdlib/atoi/


    Ho provato, scrivendo così:
    int i=atoi(pch[0]);

    ma mi dice: l'argomento di tipo char è incompatibile con il parametro di tipo "const char*".

    Domanda, quindi in pch[0] ho un char, perchè non funziona la conversione con il cast?

  4. #4
    si atoi(int) non funziona perche prende un ptr a char, la potresti chiamare come atoi(&int) che in effetti converte il char ma crea problemi nel caso tu lo volessi stampare.

    il cast non funziona,perche serve per "dire" al compilatore che quel carattere in realtà è un intero ma se poi lo vai a stampare siccome il compilatore sa che quel dato è di tipo char ti stamperà il valore ascii del carattere.

    char c='1';
    int num;
    num=(int)c;
    printf("%d\n",num) <-- questo stampera 49 ovvero il codice ascii del carattere '1'

    cmq ritornando al problema di sicuro ce una funzione che fa questo senza problemi...ma ora non mi viene in mente cmq usando una funzione di questo tipo:


    int Char_to_Int(char c)
    {
    return (int)(c-48);
    }

    la cosa dovrebbe funzionare,anche se è un rimedio un po primitivo,cmq se mi viene in mente la funzione poi la posto.

  5. #5
    atoi ha bisogno di un puntatore a char, non di un char.
    Quindi:
    codice:
    char* c = new char(array[0]);
    int i = atoi(c);
    delete c;
    lolide
    Java Programmer

    Informati

  6. #6
    Originariamente inviato da lolide
    atoi ha bisogno di un puntatore a char, non di un char.
    Quindi:
    codice:
    char* c = new char(array[0]);
    int i = atoi(c);
    delete c;
    None. La stringa deve essere NUL-terminata, e comunque non serve a niente allocare dinamicamente la memoria. Basterebbe piuttosto fare:
    codice:
    char str[2]={array[0], 0};
    int i = atoi(str);
    Ma se vuoi convertire un singolo carattere fai prima a fare:
    codice:
    if(isdigit(array[0]))
    {
        int i = array[0]-'0';
    }
    else
        // il carattere non è un numero
    Originariamente inviato da barrelshock
    codice:
    int Char_to_Int(char c)
    {
    return (int)(c-48);
    }
    Chi ti garantisce che lo zero sia il carattere 48? Usa il char literal '0'.

    In ogni caso, per tornare al problema iniziale, basta una semplice sscanf:
    codice:
    int primo, secondo;
    if(sscanf(array, "%d-%d", &primo, &secondo)!=2)
    {
        // se siamo qui si è verificato un errore di parsing
    }
    else
    {
        // i due valori sono rispettivamente in primo e secondo
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    5
    Ciao a tutti e grazie mille per l'aiuto che mi avete dato.
    Alla fine ho optato per la seguente soluzione:

    if(isdigit(array[0]))
    {
    int i = array[0]-'0';
    }
    else{
    }

    Mi è sembrata quella più opportuna, anche se funzionava anche l'altra.

    Grazie di nuovo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.