C++: aus Interger oder Long einen String machen
Tom
- programmiertechnik
Hello,
ich krebse hier mit den Typumwandlungen in C++ rum.
Wie kann ich aus einem long oder einem integer einen String machen?
Wozu gehören die Typumwandlungen in CPP?
Ich habe die Klasse cstdlib in Verdacht, komme aber im Moment an keine Doku...
Mal sehejn, wann dieser Post das Haus verlässt ;-((
Liebe Grüße Dortmund
Tom vom Berg
Hi Tom,
Wie kann ich aus einem long oder einem integer einen String machen?
long test=LONG_MAX; //2147483647;
sprintf(buf,"%i",test);
printf(buf);
oder über die ?toa Methoden (itoa, ltoa)
Grüße,
Jochen
In C++ kann man auch die STL-Klasse ostringstream
verwenden, mit dem '<<' - Operator alles mögliche
hineinschieben und das ganze dann in einen string
umwandeln:
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(void) {
ostringstream os;
int i(17);
os << i << " + " << i << " = " << i+i << endl;
string s(os.str());
cout << s;
return 0;
}
MfG
Andreas
Hello Andreas,
In C++ kann man auch die STL-Klasse ostringstream
verwenden, mit dem '<<' - Operator alles mögliche
hineinschieben und das ganze dann in einen string
umwandeln:
#include<iostream>
#include<string>
#include<sstream>using namespace std;
int main(void) {
ostringstream os;
int i(17);os << i << " + " << i << " = " << i+i << endl;
string s(os.str());
cout << s;return 0;
}
Danke für die Tipps.
Ich hatte in 'unserem' Buch "C++ von A-Z" noch etwas gefunden, eigentlich anders herum, aber habe daraus dann meine Versuche abgeleitet und eine Funktion/Methode erstellt...
Beispiel:
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
// ...
string laufzeittext(long laufzeit)
{
int stunde;
int minute;
int sekunde;
int rest;
stringstream ausgabestream;
string ausgabe = "";
stunde = laufzeit / 3600;
rest = laufzeit - stunde \* 3600;
minute = rest / 60;
rest = rest - minute \* 60;
sekunde = rest;
ausgabestream << fill('0') << setw(2) << stunde << ":"
<< fill('0') << setw(2) << minute << ":"
<< fill('0') << setw(2) << sekunde;
ausgabestream >> ausgabe;
return ausgabe;
}
Das Beispiel ist in dieser Form entstanden, weil ich einen Mitschüler hier sitzen habe, der mit meiner Hilfe erstmal das Programmieren lernt. Dafür muss er C++ verwenden, wobei sich das z.Zt. hauptsächlich noch im C-Bereich bewegt. Ich kann dann gelegentlich in die Übungen mal meine Fragestellungen einbauen und üblicherweise sollte sie mir unser Dozent dann auch beantworten können... Immer klappt das leider auch nicht aus dem Handgelenk.
(Eine Woche müssen wir noch mit "slack joint net" zurecht kommen, dann gibts hoffentlich eine neue Anbindung mit Power)
Ist das so überhaupt ok? (es geht nur um die Konvertierung, nicht um die Zeitrechnung!)
Was mich beim Besipiel irritiert:
Wie legt C++ den String fest, der ausgegeben wird? Wird der auf dem heap angelegt und nur ein Zeiger darauf übergeben?
Außerdem hat die Formatierung mittels der IOManip-Filter setw(2) nicht funktioniert. Da wurde der gesamte String auf 2 Zeichen beschränkt. Er muss abgeschnitten worden sein. Erst nachdem ich fill('0') hinzugefügt habe, hat es erwartungsgemäß funktioniert ( 00:43:13 ). Woran kann das liegen?
Der Kollege verwendet Dev-C++ 4.9.9.2
Ich habe eclipse 3.4.x aber das habe ich vorhin zum Abschmieren getrieben. Nun muss ich erstmal wieder neu installieren ;-O
}
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
hi!
Ist das so überhaupt ok? (es geht nur um die Konvertierung, nicht um die
Zeitrechnung!)
Deine Variable "ausgabe" brauchst du nicht, sondern kannst stattdessen
am Ende der Funktion gleich "return ausgabestream.str()
" schreiben.
Wie legt C++ den String fest, der ausgegeben wird? Wird der auf dem heap
angelegt und nur ein Zeiger darauf übergeben?
Das ist fuer dich unerheblich, was ja gerade einer der grossen Vorteile
von C++-Strings im Vergleich zu C-Strings sind. Aber du kannst davon
ausgehen, dass der String intern auf dem Heap angelegt wird, da die Laenge
ja zur Compile-Zeit nicht bekannt ist.
Außerdem hat die Formatierung mittels der IOManip-Filter setw(2) nicht
funktioniert. Da wurde der gesamte String auf 2 Zeichen beschränkt. Er
muss abgeschnitten worden sein. Erst nachdem ich fill('0') hinzugefügt
habe, hat es erwartungsgemäß funktioniert ( 00:43:13 ). Woran kann das
liegen?
Das kommt mir komisch vor. setw() legt die minimale Laenge der naechsten
Einfuegung in den Stream fest. fill() gibt es so gar nicht, wie du es in
deinem Code angegeben hast. Entweder musst du setfill() an der Stelle
verwenden, oder vorher bereits cout.fill(). Damit legt man das Zeichen fest,
mit dem der Stream gefuellt wird, um die angegebene Laenge zu erreichen.
Wenn das bei dir anders funktioniert, solltest du mal ein funktionierendes
Beispiel angeben, das den von dir beschriebenen Effekt zeigt.
bye, Frank!
Hello,
Das kommt mir komisch vor. setw() legt die minimale Laenge der naechsten
Einfuegung in den Stream fest. fill() gibt es so gar nicht, wie du es in
deinem Code angegeben hast. Entweder musst du setfill() an der Stelle
verwenden, oder vorher bereits cout.fill(). Damit legt man das Zeichen fest,
habe ich aber definitiv nicht, aber es wurde richtig aufgefüllt.
mit dem der Stream gefuellt wird, um die angegebene Laenge zu erreichen.
Das werde ich nochmal untersuchen.
Es wird gcc von mingw (5.1.4) benutzt unter eclipse IDE.
Da kam unserem Dozenten schon einiges ulkig vor bezüglich der includes, die eigentlich notwendig gewesen wären für Stings für einige Operationen und trotz Nichtvorhandenseins nicht zu einem Fehler geführt haben...
Dauert aber mindestens bis morgen.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg