string += Problem


  • Mod

    Blacky666 schrieb:

    SeppJ schrieb:

    Die Zahl 5 wird als das Zeichen 5 aus dem Zeichensatz deines Systems aufgefasst. Dies wird im allgemeinen nicht das Zeichen '5' sein.

    So was ähnliches habe ich mir schon gedacht... Aber was bewirkt jetzt + '0' genau?

    chars sind im Prinzip auch nur Zahlen mit denen man rechnen kann. Wenn man i + '0' rechnet, dann addiert man den Wert des Zeichens '0' zu i. Mit "Wert eines Zeichens" meine ich damit die Nummer im Zeichensatz deines Computers (z.B. ASCII, UTF-x, EBCDIC). Der C++ Standard garantiert dir, dass die Zeichen '0', '1', '2', usw. hintereinander im Zeichensatz liegen, daher ist '0' + 0 = '0', '0' + 1 = '1', '0' + 2 = '2', usw.

    edit: 😮 So viele Antworten vor mir! Ich bin einfach viel zu lahm.



  • Finde ich nicht sehr schön, das das funktioniert. Da müsste die Sprache viel strenger sein, und entsprechend der Compiler einen Error melden.



  • Sehe ich keinen Sinn drin. In C/C++ gibt es nicht den Typ Text. Ein char ist einfach nur eine Ganzzahl im Wertebereich von 8 Bit. Letztendlich ergeben sich daraus auch viele Vorteile, die man in anderen Sprachen umständlich anders lösen muss.
    Was hab ich mich immer mit Java rum ärgern müssen. Kann natürlich auch sein, dass ich es mir nur unnötig schwer gemacht habe.



  • Wie SeppJ schon schrieb, geht dies nur mit einstelligen Zahlen. Du kannst dir aber mit sprintf() einen String zusammen basteln. Oder halt über einen Stringstream.

    Um das nochmal aufzugreifen:

    int x = 150;
    const int bufferSize = 4;
    char buf[bufferSize];
    sprintf_s(buf, bufferSize, %d, x); //das '_s' heißt, das sprintf überprüft ob x nicht vielleicht zuviele zeichen für deinen buffer hat
    spath += buf;
    

    Wobei stringstreams wohl eher der c++ stil sind als sprintf (ob mit oder ohne _s)



  • Hoppala, "" um das '%d' vergessen.



  • ...



  • es ist doch viel einfacher x einfach in string umwandeln .
    Dann kannst du x zu spath addieren.



  • iritrea schrieb:

    Benutz' 'nen stringstream

    #include <sstream>
    ...
    std::ostringstream s("test/");
    s << x << ".txt"; // kein +'0' nötig, funktioniert wie std::cout
    string path(o.str()); // ich mag keine UN
    std::cout << path << std::endl;
    

    Was genau macht folgende Codezeile:

    string path(o.str());

    Ich sollte dazu sagen, dass ich noch Anfänger bin. Thx an alle anderen für die Erklärungen.
    Wenn ich jetzt die Lösung von iritrea verwende, bekomme ich als ausgabe nur eine Speicheradresse... (0012FF00)


  • Mod

    path ist ein neuer String, der am Anfang den Wert o.str() bekommt. o.str() ist die Stringrepräsentation des Stringstreampuffers.

    Solche Dinge kannst du ganz einfach in einer Referenz nachgucken (und solltest du auch unbedingt selbstständig versuchen, damit du das lernst):
    http://www.cplusplus.com/reference/string/string/string/
    http://www.cplusplus.com/reference/iostream/ostringstream/str/



  • Danke für eure Hilfe. Habe das Problem jetzt folgendermaßen gelöst:

    #include <iostream>
    #include <sstream>
    #include <string>
    using namespace std;
    
    int main(void){
    	for(int x = 1; x < 151; x++){
    		string spath;
    		stringstream sstr;
    		sstr << x;
    		sstr >> spath;
    		spath += ".txt";
    		spath.insert(0, "test\\");
    
    		cout << spath << endl;
    		/*
    		Konsolenausgabe:
    		test\1.txt
    		test\2.txt
    		test\3.txt
    		test\4.txt
    		*/
    	}
    	system("PAUSE");
    	return 0;
    }
    


  • ostringstream sstr;
    sstr << "test\\" << x << ".txt";
    string spath(sstr.str());
    cout << spath << endl;
    

    IMHO schöner!


Anmelden zum Antworten