Strings formatieren à la format("%02dh : %02dm : %02ds : %02dms", h, m, sec, ms)
-
Hallo!
Wie kann ich Strings formatieren?
So sollte es etwa aussehen:
s = format("%02dh : %02dm : %02ds : %02dms", h, m, sec, ms)
Mit welches Befehl geht das?
Viele Grüße
pmw
-
sprintf und verwandte
-
Hallo!
Leider klappt das nicht:
string s; s = sprintf("%02dh : %02dm : %02ds : %02dms", h, m, sec, ms);
172 D:\Eigenes\Eigene Programme\Super Picture Format\bin\EncLZ77.cpp invalid conversion from `int' to `const char*'
-
sprintf erwartet als ersten Parameter ein char*, welches auf freien Platz zeigt, der groß genug ist, um den ergebnisstring dort zu speichern.
boost::formated (www.boost.org) könnte auch interessant sein.
-
Leider klappt folgendes auch nicht:
FILE* datei = fopen(logfile.c_str,"w"); // <-- Fehler cout << inputfile << endl << outputfile << endl; printf("%02dh : %02dm : %02ds : %02dms", h, m, sec, ms); cout << "Benoetigte Zeit: " << s << endl; printf("%02lf %", ((startlen - endlen) / startlen) ); cout << "Kompressionsrate: " << s << endl; fclose(datei);
Fehlermeldung: cannot convert `std::string' to `const char*' for argument `1' to `FILE* fopen(const char*, const char*)'
-
c_str**()**
-
Danke das klappt.
Kann man printf auch auf strings an wenden? string = printf
-
pmw schrieb:
Leider klappt folgendes auch nicht:
FILE* datei = fopen(logfile.c_str,"w"); // <-- Fehler cout << inputfile << endl << outputfile << endl; printf("%02dh : %02dm : %02ds : %02dms", h.c_str(), m.c_str(), sec.c_str(), ms.c_str()); cout << "Benoetigte Zeit: " << s << endl; printf("%02lf %", ((startlen - endlen) / startlen) ); cout << "Kompressionsrate: " << s << endl; fclose(datei);
*kopfschüttel*
-
Kann man printf auch auf strings an wenden? string = printf
Funktionen, die noch aus C-Zeiten Stammen haben keine Ahnung von der String-Klasse. zum Schreiben in char*-Strings dient sprintf nicht printf.
sprinf(zeiger_auf_ausreichend_speicher, "foo %d", 49);
-
Leider klappt das bei mir auch nicht so ganz:
string s; sprintf(s,"Benoetigte Zeit: %02dh : %02dm : %02ds : %02dms\n", h, m, sec, ms);
cannot convert `std::string*' to `char*' for argument `1' to `int sprintf(char*, const char*, ...)'
-
pmw schrieb:
Leider klappt das bei mir auch nicht so ganz:
string s; sprintf(s,"Benoetigte Zeit: %02dh : %02dm : %02ds : %02dms\n", h, m, sec, ms);
cannot convert `std::string*' to `char*' for argument `1' to `int sprintf(char*, const char*, ...)'
versuchs ma so
char s[100]; sprintf(s,"Benoetigte Zeit: %02dh : %02dm : %02ds : %02dms\0", h, m, sec, ms); std::string nub = s;
-
Mit Strings gibt es wirklich keine Möglichkeit???
-
String ist ein 0 terminierter Array of Char ... also ist ein 0 terminierter Array of Char ein String ... siehe meine Lösung ..
-
Das Problem ist, ich weiß bei einigen Ausgaben nicht wie lang die werden. Das es sich zum Teil auch um LOG-Dateien handelt müssen die Ergebnisse auch noch an einander gehangen werden. Mit boost komme ich überhaupt nicht zurecht. Ich programmiere normalerweise mit Delphi. C++/C mache ich erst seit 2 Wochen.
-
std::string gibt dir keinen Schreibzugriff auf den Zeicheninhalt. Nimm entweder "richtiges C" (viel Spaß) oder "richtiges C++": std::stringstream oder boost::format z.B.
-
pmw schrieb:
Das Problem ist, ich weiß bei einigen Ausgaben nicht wie lang die werden. Das es sich zum Teil auch um LOG-Dateien handelt müssen die Ergebnisse auch noch an einander gehangen werden. Mit boost komme ich überhaupt nicht zurecht. Ich programmiere normalerweise mit Delphi. C++/C mache ich erst seit 2 Wochen.
dann hängs dir doch gleich selber zusammen ..
std::string somestringvar = "some string"+IntToStr(someint);
-
@pmw
Wenn du von der Stringklasse keinen Zeiger auf char zurückbekommst wohl kaum. Außer so wie es dir 1ntrud0r gezeigt hat.
-
#include <iomanip> #include <sstream> #include <string> ... std::ostringstream stream; stream << "Benoetigte Zeit: "; stream << std::setw(2) << std::setfill('0') << h << "h : "; stream << std::setw(2) << std::setfill('0') << m << "m : "; stream << std::setw(2) << std::setfill('0') << sec << "s : "; stream << std::setw(2) << std::setfill('0') << ms << "ms"; std::string date << stream.str();
Obwohl es zugegebenermaßen etwas lang ist, ist es immerhin sicher und funktioniert
-
edit : verlesen
-
...?