Länge eines Integers



  • Hi,

    gibt es eine Möglichkeit, die Länge eines Integers abzufragen, und dann zeichenweise "durchzuwandern"? Ich meine so etwas:

    cin >> zahl;
    for (int i=0; i<zahl.length(); i++) {
       cout << zahl[i];
    }
    

    Nur gibt es ja leider diese length()-Funktion nicht...

    Habt Ihr eine Idee, wie man so etwas macht?

    MfG, Ozzy



  • Was ist denn "zahl" für ein Typ? Ein int? Der hat keine Länge, da es kein String ist. int ist ein primtiver Datentyp, meistens 32 bit breit.



  • Ja, wie geschrieben sollte es sich dabei um einen Integer handeln... Also in einen String umwandeln???

    MfG, Ozzy



  • nein. sizeof gibt dir die Größe einer Variablen in Bytes zurück.



  • Ozzy schrieb:

    Ja, wie geschrieben sollte es sich dabei um einen Integer handeln... Also in einen String umwandeln???

    MfG, Ozzy

    int zahl;   
        cin >> zahl;
        cout << zahl << endl;
    

    😕



  • Mein gott stellt ihr euch alle an. 🙄
    Du kannst entweder deine zahl in einen string umwandeln, siehe dazu faq einmal zahl und zurück. und so die ziffern einzeln ansprechen.
    oder du machst es so

    ...
    int zahl = 12394;
    int stellen = static_cast<int>(log10(zahl)) + 1; //stellen der Zahl
    int ziffer = 0;
    for (int i = 0; i < stellen; ++i, zahl /= 10)
    {
        ziffer = zahl % 10; //Ziffer der Zahl. 
    }
    

    Die schleife zählt allerdings vom Ende zum Anfang der Zahl.



  • Jo, und genau das soll sie natürlich nicht... Ich arbeite jetzt einfach auf strings... Nicht so schön, aber was solls...

    MfG, Ozzy



  • Ozzy schrieb:

    Jo, und genau das soll sie natürlich nicht...

    Darf man mal fragen warum? Wenn es um Effizienz geht, da sind Strings noch deutlich schlechter.



  • Hi,

    ja, ich weiß, dass strings schlechter sind, aber ich denke, das ist für mein Projekt zu vernachlässigen.

    Jo, und genau das soll sie natürlich nicht...

    bezog sich darauf, dass bei der Lösung die Zahl rückwärts ausgegeben wurde, und ich glaube, hätte ich sie dann wieder umdrehen müssen, hätte mir das noch weniger gebracht...

    MfG, Ozzy



  • Ozzy schrieb:

    Jo, und genau das soll sie natürlich nicht...

    bezog sich darauf, dass bei der Lösung die Zahl rückwärts ausgegeben wurde

    Und wo ist das Problem dabei? Um die Länge zu ermitteln, spielt das keine Rolle. Zudem kann die Reihenfolge der Stellen kann je nach Iterationslogik unterschiedlich implementiert werden.



  • Hallo Ozzy,

    wenn Du die Zeichenfolge eines int der Reihe nach bearbeiten möchtest, schlage ich Dir folgende Lösungen vor:

    #include <iostream>
    #include <string>
    #include <sstream>  // ostringstream
    #include <algorithm> // for_each
    
    void macheWas( char zeichen )
    {
        using namespace std;
        // mache was mit 'zeichen'
        cout << "zeichen = " << zeichen << endl;
    }
    
    int main()
    {
        using namespace std;
        int zahl = 12345;
        ostringstream buf;
        buf << zahl;    // Konvertiere int in eine Zeichenfolge
        string zahlAsText = buf.str();
        // eher nicht zu empfehlen
        for( string::size_type i = 0; i != zahlAsText.size(); ++i )
        {
            // mache was mit 'zahlAsText[i]'
            cout << "zahlAsText[i] = " << zahlAsText[i] << endl;
        }
        // oder besser
        for( string::iterator i = zahlAsText.begin(); i != zahlAsText.end(); ++i )
        {
            // mache was mit '*i'
            cout << "*i = " << *i << endl;
        }
        // oder STl like
        for_each( zahlAsText.begin(), zahlAsText.end(), &macheWas );
        return 0;
    }
    

    Was soll denn mit den Zeichen geschehen?

    Gruß
    Werner


Anmelden zum Antworten