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