Jay Peg Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Hi Leuts Hat jemand nen Plan, wie ich einen teil eins strings, (von dem ich weiß daß zahlen drin stehen) in eine als int oder double deklarierten varible umladen kann?? BeispielCode: string test, Laenge, teilstring; int nummerisch; cout << "Bitte eingeben:"; cin >> test; laenge=test.length(); teilstring = rechenaufgabe.substr(5, laenge); // nun ab hier weiß ich nicht mehr wie... teilstring -> nummerisch Zitieren
Woodstock Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Probier es mal mit 'int atoi( const char *string );'. Soweit ich weiß werden da nur Zahlen umgewandelt. Alles was ein Buchstabe oder so ist, wird ignoriert! Bine Zitieren
Jay Peg Geschrieben 5. Juli 2002 Autor Geschrieben 5. Juli 2002 Original geschrieben von Woodstock Probier es mal mit 'int atoi( const char *string );'. Soweit ich weiß werden da nur Zahlen umgewandelt. Alles was ein Buchstabe oder so ist, wird ignoriert! Bine nummerisch = atoi(teilstring) so hab ich´s schon probiert, läuft aber auf nen fehler, beim compilieren... Zitieren
Woodstock Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Hmm, dann musst Du den String zuerst mit 'strtok()' zerlegen. Würde ich zumindest versuchen! Bine Zitieren
Klotzkopp Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Original geschrieben von Killasoft nen fehler, beim compilieren... Da Du uns ja nicht sagst, welcher Fehler auftritt, schau ich in meine Kristallkugel, und sehe: Du hast #include <stdlib.h> vergessen. P.S.: Zitieren
Jay Peg Geschrieben 5. Juli 2002 Autor Geschrieben 5. Juli 2002 Original geschrieben von Klotzkopp Da Du uns ja nicht sagst, welcher Fehler auftritt, schau ich in meine Kristallkugel, und sehe: Du hast #include <stdlib.h> vergessen. P.S.: Danke du 9 x kluger! schau Du in Deine Kristallkugel, und lass Deine Blöden comments! Fehler: cannot convert `zahl1' from type `string' to type `const char *' p.s.: den include <string> hab ich au ned vergessen ;-) Zitieren
Klotzkopp Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Du hast den Smilie nicht gesehen, stimmts? P.S.: zahl1.c_str() Zitieren
Jay Peg Geschrieben 5. Juli 2002 Autor Geschrieben 5. Juli 2002 Original geschrieben von Klotzkopp Du hast den Smilie nicht gesehen, stimmts? P.S.: zahl1.c_str() Danke, so geht´s... :marine Zitieren
Crush Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Vielleicht weil´s dazu paßt noch als Anmerkung: Der Unterschied zwischen LPSTR und LPCSTR ist, daß Letzterer einen schreibgeschützter Zeiger auf den String ist. Desweiteren gibt es noch den LPCTSTR, welcher auch wieder dasselbe ist, aber den String in Unicode und DBCS (SQL Server) überträgt. Wird das Objekt aufgelöst, ist der Zeiger gelöscht. Große Frage eröffnet sich dadurch: Sollte man set-/get-Routinen mit const CString& oder mit LPCSTR deklarieren? Antwort: Nach Möglichkeit IMMER CString, weil dieser mehr Konvertierungsoperatoren eröffnet! Wichtig noch zu wissen wenn man schon bei CString ist: Der Standard Copy-Konstruktor für CStrings ist in Wirklichkeit immer eine Referenz: Es wird keine Kopie angelegt! Wenn nun CStr1 ein anderer String per =-Operator zugewiesen wird, wird ein neuer String erstellt und der Zeiger darauf hingebogen! CStr1 zeigt also plötzlich nicht auf denselben sondern auf den alten String. Erst wenn die letzte Referenz umgebogen wird wird der String aus dem Speicher gelöscht! Insofern unterscheiden sich CString dramatisch von normalen Character-Arrays. Erst mit const CString& operator=(LPCSTR CStr1); wird ein wirklich neuer String beim zuweisen angelegt. Also was lernen wir als Fazit: Immer const CString& bei Deklarationen verwenden! War das nun eigentlich OT? Zitieren
Klotzkopp Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Original geschrieben von Crush War das nun eigentlich OT? Naja, zumindest der CString. Da kannst Du ja gleich void main sagen Aber was anderes: Ist das casten eines std::string auf einen const char* nicht etwas heikel? So weit ich weiß, ist bei einem STL-String nicht gewährleistet, dass er nullterminiert ist... Zitieren
Crush Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Doch schon, wenn man selber nämlich einen GetBufferSetLength() oder LockBuffer() macht (soweit ich weiß, müßte ich nochmal zur Sicherheit abchecken) der Lockbuffer zählt übrigens den Reference-Counter hoch, daher weiß er ob noch ein Zeiger auf den String verweist oder nicht und läßt ihn stehen oder setzt ihn auf 0. Normal sind die tatsächlich nicht unbedingt 0-terminiert. Aber beim Cast wird dann die Terminierung falls fehlend hinzugefügt (deshalb auch die Const beim lpC(t)Str, sonst wäre es ja fies einen Zeiger auf einen normalen String zurückzuliefern - Könnte ja böse Folgen haben. Wenn man selber den =-Operator überschreibt sollte man sich evtl. überlegen, ob man nicht gleich eine Terminierung hinzufügt. Zitieren
Klotzkopp Geschrieben 6. Juli 2002 Geschrieben 6. Juli 2002 Ich glaube, wir reden aneinander vorbei. Du sprichst immer noch von CString, oder? Zitieren
Crush Geschrieben 6. Juli 2002 Geschrieben 6. Juli 2002 Achso. Der STL-String ist anscheinend immer 0-terminiert. Es gibt deshalb auch keinen direkten LPSTR-Konvertierungs-Operator und man muß "hart" casten oder selber davon ableiten und einen K-Op hinzufügen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.