Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

Hmm, dann musst Du den String zuerst mit 'strtok()' zerlegen. Würde ich zumindest versuchen!

Bine

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

Original geschrieben von Klotzkopp

Du hast den Smilie nicht gesehen, stimmts?

P.S.: zahl1.c_str()

Danke, so geht´s...

:marine

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?

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

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.

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.