Strings formatieren à la format("%02dh : %02dm : %02ds : %02dms", h, m, sec, ms)



  • 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 😞



  • ...?



  • Was willst du eingentlich tun?

    Deine erste Frage hob nur auf die Formatierung eine Strings ab, die Lösung von "1ntrud0r" funktioniert.

    Jetzt kommt deine Bemerkung

    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.

    Eine log Datei besteht normalerweise aus Zeilen. Zeilen können einzeln nacheinander geschrieben werden. Die Formatierung für eine Zeile hast du oben.

    Wenn du nicht weist wie lang eine Zeile wird mach den Buffer "ausreichend gross" zum Beispiel 512 Zeichen. In Log Dateien sollten Zeilen selten länger als 128 Zeichen werden, denn was länger ist als ein Bildschirm breit ist ist sehr schwer zu lesen

    Vielleicht erklärst du ein bisschen mehr was du eigentlich vorhast, dann kann man auch etwas besser helfen.



  • @1ntrud0r

    Veilleicht solltest du deine tolle Funktion IntToStr auch mal definieren, da jemand der erst zwei wochen C++ programmiert damit vielleicht schwierigkeiten hat.

    ---------------
    Wenn du Boost nicht magst, dann nim operator voids Variante und pack das in ne Funktion.


Anmelden zum Antworten