Da Stringa a INT

di il
5 risposte

Da Stringa a INT

Buongiorno, é il mio primo argomento nel forum.

Sto svolgendo un progetto con Arduino.
Ho incontrato una difficoltà di basso livello riguardante le stringhe che non riesco a superare .

Ho una stringa che è composta da HH:MM:SS e un intero che rappresenta l'ORA.
devo confrontare HH (sotto-stringa di due elementi che va da 01 a 24) con ORA( int che va da 0 a 24).

In internet ho trovato talmente tanti suggerimenti in C o C++ che sono andato in confusione e non riesco a ramparne fuori.

ho idea che debba essere risolto cosi:
-Prendere dalla stringa HH:MM:SS la sottostringa HH
-Tradurre la sotto-stringa HH in intero
-confrontare HH con l'intero ORA

Ma non è obbligatorio. l'importante è che funzioni.

uno dei problemi: HH è una stringa che contiene stringhe come 01,02... che tradotte in int (con ad esempio stoi()) non danno il risultato sperato (1,2..) dando invece problemi bloccando l'esecuzione del programma.

5 Risposte

  • Re: Da Stringa a INT

    Dato che è Arduino, versione bare metal
    
    #include <iostream>
    #include <string>
    
    int main(){
        //char ora[] = "12:13:14";
        std::string ora = "12:13:14";
        int h = (ora[0] - '0') * 10 + ora[1] - '0';
        printf("%d", h);
        
        return 0;
    }
    
  • Re: Da Stringa a INT

    fbotta ha scritto:


    ...
    Ma non è obbligatorio. l'importante è che funzioni.
    ...
    Sta' proprio qui' il ragionamento sbagliato:

    NON BASTA che funzioni,

    DEVE FUNZIONARE SEMPRE e in tutte le possibili condizioni.

    E per ottenere questo si deve conoscere pregi e diffetti di ogni soluzione.
  • Re: Da Stringa a INT

    Weierstrass ha scritto:


    Dato che è Arduino, versione bare metal
    
        std::string ora = "12:13:14";
        int h = (ora[0] - '0') * 10 + ora[1] - '0';
    
    Grazie mille per la risposta rapida e al sodo.
    Nella traduzione da stringa a intero prendi il primo char e lo moltiplichi per 10 essendo decina e lo sommi alle unità.
    Vorrei chiederti però come mai sottrai il char '0'.

    È perchè non essendo int quindo moltiplico per 10 darebbe problemi?
    E se ad esempio avessi HH=10 --> ('1'-'0')+('0'-'0')
    Quale logica ci sta dietro?
  • Re: Da Stringa a INT

    fbotta ha scritto:



    Vorrei chiederti però come mai sottrai il char '0'.
    https://it.wikipedia.org/wiki/ASCII#Stampabil
    il carattere zero vale 48. Potresti sottrarre direttamente 48, ma meglio sottrarre '0' nella remotissima possibilità che chi ha scritto il compilatore abbia usato una codifica differente. Le altre cifre stanno appena dopo lo zero e vanno da 49 a 57 in ASCII. In qualsiasi altra codifica sana di mente le cifre stanno tutte vicine e in ordine

    Non hai nessun problema di cast perché le formula danno risultati <= 255 a meno di stringa errata in partenza, anzi se il processore è a 8 bit è meglio dichiarare h come char
  • Re: Da Stringa a INT

    Ah ecco! perfetto ho capito, grazie mille!
Devi accedere o registrarti per scrivere nel forum
5 risposte