Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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...

Geschrieben
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.: ;)

Geschrieben
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 ;-)

Geschrieben

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?

Geschrieben
Original geschrieben von Crush

War das nun eigentlich OT?

Naja, zumindest der CString. Da kannst Du ja gleich void main sagen :D

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...

Geschrieben

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.

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...