2012-04-02 9 views
0

Wie würde ich durch eine Zeichenfolge nach einem Wort statt jedes Zeichen in diesem Wort suchen. Ich habe meinen Code hier und es scheint immer alles zu finden, was .obj ist, auch wenn es o oder b oder j oder "." Ich überprüfte die Dokumentation here, konnte aber keine Antwort finden. Hier ist mein Code:Was ist der richtige Weg, um mit string :: find nach einem Wort zu suchen?

string &str = *it; 

if(it->find(".obj")) 
{ 
    cout << "Found .Obj" << endl; 
} 

Ich habe auch versucht string::compare zu verwenden, aber das scheiterte.

+0

Zeigen Sie den gesamten Code; dh. was es ist. Außerdem ist der Rückgabewert NICHT wahr oder falsch, je nachdem, ob die Teilzeichenfolge gefunden wurde - lesen Sie die Dokumentation erneut. – Kylotan

+0

haben Sie versucht, nur mit .substring (". Obj") – gardian06

Antwort

8

find sucht nach der Volltextzeichenfolge, die Sie als Funktionsargument übergeben. Was du missverstehst, ist der Rückgabewert; find gibt nicht wahr oder falsch zurück, ob die von Ihnen angeforderte Zeichenfolge gefunden wurde oder nicht; Sie gibt den Index in der Zeichenfolge zurück, in der die angeforderte Teilzeichenfolge gefunden wurde, oder std::string::npos, wenn keine Übereinstimmung gefunden wurde.

So zum Beispiel:

std::string a = "foobar.obj"; 
std::string b = "baz.obj"; 
std::string c = "qux"; 
std::string d = ".obj"; 

a.find(".obj") == 6 
b.find(".obj") == 3 
c.find(".obj") == std::string::npos // not found 
d.find(".obj") == 0 

Wenn es als Booleschen Wert interpretiert, jede ganze Zahl ungleich 0 als "wahr" behandelt wird - auch die "nicht gefunden" std :: string :: npos Wert. Was ist, denke ich, was hast du verwirrt?

Also in Ihrem "if" Anweisung, dann, statt:

if (it->find(".obj")) 

Sie wollen Tests sein:

if (it->find(".obj") != std::string::npos) 
+0

Ty Trevor :) Ich werde mich erinnern, um den Rückgabewert ab jetzt zu sehen –

Verwandte Themen