Ich arbeite durch ein Buch über C++ und es behandelt nur string::npos
, um zu überprüfen, ob eine Zeichenposition in einer Zeichenfolge vorhanden ist. Ich verstehe nicht, wie dieser Mechanismus möglicherweise wissen könnte, auf welche Saite ich mich beziehe! Dieser spezifische Code zählt die Anzahl der Vorkommen einer Teilzeichenfolge.Woher weiß string :: npos, auf welchen String ich mich beziehe?
Code:
for (int i=cats.find("cat",0);i!=string::npos;i=cats.find("cat",i)) {
++catCount;
++i;
}
Ich verstehe, dass es um die Schleife beim ersten Auftreten des Wortes beginnt, Inkrementieren des Zählers jedes zweimal durch die gleiche Teilkette zu vermeiden passieren Zählen, und dann am Ende von jeder Schleife springt der Zähler zu der Position des nächsten Auftretens der Teilkette. Die Schleife wird beendet, wenn der Zähler nicht als Zeichenindex für die Zeichenfolge existiert.
Die Zeichenfolge heißt cats though, und "cats" ist nirgendwo in "string :: npos" zu finden, also wie weiß ich, dass das die Variable ist, nach der ich suche? Ist es einfach, weil das die letzte Variable war, die .find()
aufgerufen wurde?
Danke!
Es ist nur eine Konstante, die 'find' zurückgibt, wenn es nicht finden kann, wonach es sucht. – chris
'find()' gibt den Wert 'npos' zurück, der als statischer Datenmember von' std :: string' gespeichert wird, wenn er die Zeichenkette nicht finden kann. – 0x499602D2
Und ich nehme an, "static data member" bedeutet hier dasselbe wie in anderen OO-Sprachen, das heißt, dass derselbe Wert zurückgegeben wird, wenn von irgendwo im Programm darauf zugegriffen wird und keine Instanz des Objekts sein muss vorhanden für den Wert, auf den zugegriffen und manipuliert werden soll? –