std::string und Ersetzungsplatzhalter



  • Hi...
    Bisher war ich mit std::string immer sehr zufrieden, doch jetzt komme ich an eine Stelle, an der die C-Char-Arrays ihre Vorteile zeigen (zumindest meiner Ansicht nach):

    void x(char *pszText, ...)
    {
    	char szBuffer[128] = { '\0' };
    
    	va_list vaParameters;
    	va_start(vaParameters, pszText);
    	vsprintf(szBuffer, pszText, vaParameters);
    	va_end(vaParameters);
    
    	// tu was mit szBuffer
    }
    
    x("Hallo %s, du bist %i Jahre alt und bist %0.2fm groß!", "Peter", 18, 1.85);
    

    Mit std::string scheint das ganze mehr als nur kompliziert zu sein:

    void x(const std::string &strText)
    {
    	// tu was mit strText.c_str()
    }
    
    std::stringstream strTemp;
    strTemp << "Hallo " << "Peter" << ", du bist " << 18 << " Jahre alt und bist " << 1.85 /*einfaches umformen mit %0.2f entfällt*/ << "m groß!";
    x(strTemp.str());
    

    Geht das nicht auch einfacher? Am besten wäre natürlich ein Einzeiler.

    Gruß



  • theliquidwave schrieb:

    ...
    Mit std::string scheint das ganze mehr als nur kompliziert zu sein:...

    Mir nicht.
    ... und sicherer ist es auch noch.

    Ich würde also sagen: Ein schönes Beispiel dafür, wo std::string (&Co) seine Stärke ggü. char* ausspielen kann. 😃

    Gruß,

    Simon2.



  • Sagen wir so... Formatierungs-Strings haben ihren Vorteil, wenn man die Anwendung Internationalisieren will...

    Wenn du magst, kannst du dir mal Boost Format anschauen.



  • Ausserdem gibts ja auch noch Formatierungsbibliotheken:
    Boost Format oder Fast Format...

    Simon


Anmelden zum Antworten