string += Problem
-
Blacky666 schrieb:
Aber was bewirkt jetzt + '0' genau?
'0' ist das Zeichen "0", im ASCII sind die Zahlen 0..9 hintereinander in der Codetabelle. So das ein aufaddieren einer Zahl zwischen 0 und 9 das gewünschte Zeichen liefert.
Blacky666 schrieb:
Ein weiteres Problem ist, dass in meinem kompletten Programm (das Code Beispiel ist nur ne stark verkürzte Version) x am Ende den Wert 150 hat...
Dann musst du händisch dies zusammensetzen (Einer-, Zehner und Hunderterstelle).
P.S.: iritrea hat mit dem Streams den sinnvolleren Weg beschrieben

-
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?
Schau dir mal eine ASCII-Tabelle an.
Blacky666 schrieb:
Ein weiteres Problem ist, dass in meinem kompletten Programm (das Code Beispiel ist nur ne stark verkürzte Version) x am Ende den Wert 150 hat...
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.
-
x + '0'ist eine Addition int + char. Dabei wird das char in einen int konvertiert (d. h. als 1-Byte-Ganzzahl aufgefasst). Wenn es sich um den ASCII-Zeichensatz handelt (was höchstwahrscheinlich zutrift), wird aus '0' die Zahl 48 (google nach ASCII). Da die Ziffern in ASCII in der richtigen Reihenfolge direkt hintereinander stehen, kannst du mit dieser Addition also den ASCII-Wert y der Ziffer x erhalten. Dann addierst du y zu spath. Schauen wir uns mal an, welche Parameter dieser Operator annimmt: http://www.cplusplus.com/reference/string/string/operator+=/
Deroperator+= ( char c )passt. Es muss nur noch der int-Wert y in ein char umgewandelt werden. Also wird wieder in der ASCII-Tabelle geschaut, welches Zeichen die Ganzzahl y repräsentiert. Dieses Zeichen wird dann an den String angehängt.Wenn dein x nun mehr als ein Zeichen hat, funktioniert der Weg natürlich nicht mehr. Dann kannst du z. B. in die FAQ schauen, um andere Lösungen kennenzulernen.
-
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)
-
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!