String::find_first_of

Guntpat1981

Mitglied
Hallo Leute,

ich habe ein Problem mit der find_first_of Funktion der Klasse String.
string str;
string::size_type location=0;

location = str.find_first_of(".", 0);

ich verwende die Funktion, um in einem Wort einen Punkt "." zu finden und die location auszumachen. Das Problem ist, dass mehrere Wörter diesen Punkt gar nicht enthalten und es kommt bei meinem Programm zu einer "abnormal program termination".
Ich habe gelesen, dass die Funktion -1 zurückgibt, wenn sie nichts findet, bei mir ist es ein Wert an der 4 Milliarden - Marke, es scheint also einen Überlauf zu geben, den ich mir nicht erklären kann.

Vielleicht könnt ihr mir ja helfen

Gruß,
Patrick
 
Ich habe gelesen, dass die Funktion -1 zurückgibt,

Dann hast du das nich ganz richtig verstanden
Die Funktion gibt bei nicht finden einen Wert zurück der
static const std::string::size_type npos entspricht.
Dieser Wert ist in std::string als Konstante definiert:
Und string::npos entspicht dem Wert string::size_type(-1).
Ein Abfragen auf diesen Wert wäre besser:

Code:
#include <iostream>

using namespace std;

int main(){
    
        string word = "blabla";

        if(word.find_first_of(".", 0) == string::npos)
                cout << "No points found" << endl;      
        else
                cout << "Word contains a point" << endl;
}
oder so:

Code:
#include <iostream>

using namespace std;

int main(){
    
        string word = "blabla";

        if(word.find_first_of(".", 0) == string::size_type(-1))
                cout << "No points found" << endl;      
        else
                cout << "Word contains a point" << endl;

        cout << string::size_type(-1) << endl;
}
Gruß

RedWing
 
Zuletzt bearbeitet:
Danke soweit! Nun habe ich das Problem, dass ich das Zeichen an der gefundenen Stelle mit der erase - Funktion löschen möchte, aber wie greife ich auf diese Stelle zu?

String & erase (size_type pos = 0, size_type n=npos);
 
Zurück