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 😞



  • ...?


Anmelden zum Antworten