std::string Nummer anhängen



  • Hallo,
    ich möchte an einen std::string mit Inhalt z.b. "C:\Ordner\datei." eine Nummer anhängen.
    Aber es sollte in dem Format 00x sein, d.h. wenn die nummer 5 ist: 005 wird angehängt, wenn sie 12 ist 012 wird angehängt usw.



  • Schaue in der FAQ nach: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html

    Mit dem stream manipulator std::hex kannst Du die Zahlen im Hex Format darstellen.



  • Mir ist schon klar, wie ich eine Zahl in einen string umwandeln kann, aber ich möchte die Zahl vorher formatieren. also das mit dem 000 und zahl rein..



  • #include <iomanip>
    
    std::cout << std::setfill('0') << std::setw(3) << zahl;
    

    Nur statt std::cout dann nen stringstream nehmen



  • Manipulatoren width und fill.
    hrm.



  • wenn du es machst wie Badestrand es vorschlägt kannst du dir iomanip sparen 🙂



  • einuser schrieb:

    Mir ist schon klar, wie ich eine Zahl in einen string umwandeln kann, aber ich möchte die Zahl vorher formatieren. also das mit dem 000 und zahl rein..

    guck dir mal streams an und deren manipulatoren,

    z.b. so

    std::string mystr = "C:\\MyPath\\file_";
    
    int zahl = 5;
    
    std::stringstream out;
    out << mystr;
    out.width(3); // alternativ: out << setw(3);
    out.fill('0'); // alternativ: out << setfill('0');
    out << zahl; // alles in einem: out << setw(3) << setfill('0') << zahl;
    
    std::cout << out.str() << std::endl; // ausgabe: C:\MyPath\file_005
    

    grüße

    *edit: ZU SPÄT. memo: browser öfter aktualisieren.



  • Es geht auch ohne stringstreams

    #include <iostream>
    #include <string>
    
    std::string func(std::string ordner, std::string nummer)
    {
    	std::string temp("0");
    	std::string tmp("00");
    	if (nummer.size() == 1)
    	{
    		ordner += tmp;
    	    ordner += nummer;
    	}
    	if (nummer.size() == 2)
    	{
    		ordner += temp;
    	    ordner += nummer;
    	}
    	return ordner;
    }
    
    int main() 
    {
    	using namespace std;
    
    	string test = func("C:\\Ordner\\datei.", "12");
        //  oder z.B. die Ausgabe
    	cout << func("C:\\Ordner\\datei.", "12") << endl;
    }
    

    😉



  • 🙄
    Es geht auch ihn std::string:

    // ...
    // ... noch ein Beispiel für 
    // ... 300 Zeilen Spagehtticode, der ein paar Spezialfälle abdeckt, 
    // ... aber nicht intuitiv zu benutzen ist, dafür aber in vielen anderen Fällen, 
    // ... an die der Ersteller nicht gedacht hat, Seltsames liefert.
    // ...
    

    Gruß,

    Simon2.



  • #include <sstream> // std::ostringstream
    #include <string> && std::string
    
    std::string& add_index(std::string& string, const std::size_t index, const std::size_t width)
    {
        std::ostringstream ss;
        ss.width(width);
        ss.fill('0');
        ss << index;
        return string += ss.str();
    }
    
    int main()
    {
        std::string sample_first("auto_");
        std::cout << add_index(sample_first, 2, 3) << std::endl;
        std::string sample_second("image_");
        std::cout << add_index(sample_second, 12, 3) << std::endl;
    }
    

Anmelden zum Antworten