Verständnisfrage zu string::npos
-
Hallo zusammen,
ich nehem gerade das Kapitel "Strings" durch und ich habe dazu eine Frage. Die statische Methode npos liefert -1 zurück, wenn ein Teilstring bei einer Suche nicht gefunden wurde? Liege ich da richtig oder komplette daneben. Ich verstehe noch nicht die Funktionsweise von npos. Mal ein Beispielprogramm:#include <iostream> #include <string> using namespace std; int main() { string a="Das ist ein String"; a.find("ein"); //ist vorhanden if (string::npos) cout << "Nicht gefunden\n"; //funktioniert nicht else cout << "Gefunden\n"; return 0; }
Es wird immer -1 ausgegeben. Mir macht die Syntax hier ein bisschen Schwierigkeiten. Wie verknüpfe ich npos genau?
Könnt ihr mir helfen?
Vielen Dank
lg, freakC++
-
freakC++ schrieb:
Die statische Methode npos liefert -1 zurück, wenn ein Teilstring bei einer Suche nicht gefunden wurde?
npos ist keine "Methode". Es ist eine Konstante, die find liefert, falls find nicht fündig geworden ist.
-
Du sollst also nicht auf
npos
prüfen, denn das ist konstant und unabhängig davon, ob etwas gefunden wurde. Vielmehr kannst du den Rückgabewert vonstd::string::find()
mitstd::string::npos
vergleichen. Falls die beiden gleich sind, wurde nichts gefunden. Alles klar?
-
Achso, und wie kann ich die hier praktisch anwenden. Ich meine, wie muss die Syntax lauten, damit ich npos verwenden kann bzw. diese mir sagt, dass ein Teilstring nicht gefunden worden ist?
Vielen Dank für deine Hilfe
lg, freakC++PS.: Wenn npos eine Konstante ist, wie kann sie dann den Wert -1 zurückliefern?
@Nexus: Ja, es wird klarer! Dennoch würde ich micht über eine kleine Demonstration freuen, damit es noch klarer wird
-
freakC++ schrieb:
PS.: Wenn npos eine Konstante ist, wie kann sie dann den Wert -1 zurückliefern?
Wie? Ich verstehe die Frage nicht. Du greifst darauf normal zu.
freakC++ schrieb:
@Nexus: Ja, es wird klarer! Dennoch würde ich micht über eine kleine Demonstration freuen, damit es noch klarer wird
Schau mal auf www.cplusplus.com unter
string::find()
nach, dort gibts bestimmt Codebeispiele.
-
freakC++ schrieb:
Achso, und wie kann ich die hier praktisch anwenden. Ich meine, wie muss die Syntax lauten, damit ich npos verwenden kann bzw. diese mir sagt, dass ein Teilstring nicht gefunden worden ist?
[...]
Dennoch würde ich micht über eine kleine Demonstration freuen, damit es noch klarer wirdGIYF [Google Is Your Friend]
freakC++ schrieb:
PS.: Wenn npos eine Konstante ist, wie kann sie dann den Wert -1 zurückliefern?
Ist doch egal, was der Wert von npos ist, oder?
Gruß,
SP
-
Hallo,
ne, so habe ich das nicht gemeint, aber mir ist das jetzt klar geworden. npos hat also immer den Wert -1 und ich kann einfach den Rückgabewert einer Suche mit string::find() mit dieser Konstante vergleichen?Wenn das so ist, dann frage ich mich, warum der Programmierer nicht einfach schnell diese Zeile schreibt:
const int notfound = -1;
und eine Suche mit seiner eigenen Konstante vergleicht!? Bestimmt habe ich noch einen Denkfehler, oder ?!
Vielen Dank für eure Hilfe
lg, freakC++
-
Wieso sollte man eine Magic Number festlegen? Dir kann ganz egal sein, ob
npos
nun den Wert -1, -3252621 oder 42 besitzt. Indem du aufstd::string::npos
prüfst, ist gerade klar, dass du auf einen nicht gefundenen Wert abfragst.Wenn dir das zu viel Aufwand ist, schreib doch eine Funktion, die dir einen
bool
zurückgibt und das automatisch prüft.
-
freakC++ schrieb:
npos hat also immer den Wert -1 und ich kann einfach den Rückgabewert einer Suche mit string::find() mit dieser Konstante vergleichen?
Wie kommst Du darauf, dass "npos immer den Wert -1" hat? Wenn ich std::string::npos auf cout rausschicke, bekomme ich 4294967295 raus. In diesem Fall ist es das Ergebnis von static_cast<size_t>(-1). size_t ist vorzeichenlos.
Wie auch immer der Wert von npos definiert ist, es ist EGAL. Vergleiche das Ergebnis von find einfach mit der Konstante npos -- dafür ist die da.
-
Hallo,
ok..dann habe ich es verstanden!Vielen Dank für eure Hilfe
lg, freakC++