String -> Int ( 3.142 -> 3142 ) ?



  • Hi Leute,

    ich habe bis jetzt schon einiges probiert aber entweder wird einfach nur aufgerundet auf 4 oder abgerundet auf 3, bislang hab ich keine Möglichkeit gefunden das aus 3.142 -> 3142 wird.

    Ich könnte den double wert * 1000 nehmen oder solche Scherze leider handelt es sich hierbei aber nicht wirklich um ein , sondern um den segmentierungspunkt, so das ich bei 3.132.345 (3Mio) das problem hätte das mir dann mein Algorythmus durchdrehen würde. Da ein double meines wissens keine 2x , haben darf.

    ich will nach den punkten suchen und diese im String löschen danach dann die gesamte zahl direkt in int schreiben, soweit sollte das auch gehen, aber ich blick nicht wie man "ispunct" auf den String verwendet.

    Kann mir jemand weiterhelfen 'ganz lieb guck*



  • wie gross sind die zahlen maximal, die du parsen willst?

    denn wenn du zahlen >INTMAX verarbeiten möchtest, solltest du dich gleich nach einer langzahlarithmetik-bibliothek umsehen. vielleicht findest du sogar eine, die die von dir gesuchte funktionalität unterstützt.

    ich nehme mal an, du verwendest char-arrays. dann testest du einfach mit

    ispunct(chararray[100]);
    

    (nur zum beispiel)



  • Hallo,

    so kannst du es auch machen:

    #include <iostream>
    #include <sstream>
    #include <algorithm>
    using namespace std;
    
    int main() {
        string str("1.203.134");
    
            str.erase(remove(str.begin(), str.end(), '.'), str.end());
            stringstream sstr(str);
            int i;
            sstr >> i;
            cout<<i<<endl;
    
        return 0;
    }
    

    mfg
    v R



  • virtuell Realisticer schrieb:

    Hallo,

    sstr >> i;
    

    Man könnte das auch ohne std::stringstream machen->

    int i = atoi(str.c_str());
    

Anmelden zum Antworten