2009-04-20 23 views
2

ich hier sein dumm, aber ich kann nicht die Funktion Signatur für das Prädikat erhalten werde find_if wenn eine Zeichenfolge iterieren:mit std :: find_if mit std :: string

bool func(char); 

std::string str; 
std::find_if(str.begin(), str.end(), func)) 

In diesem Fall google hat mein Freund gewesen :(ist jemand hier?

+0

Was ist die Frage? "Ist hier jemand?" – kim366

Antwort

9
#include <iostream> 
#include <string> 
#include <algorithm> 

bool func(char c) { 
    return c == 'x'; 
} 

int main() { 
    std::string str ="abcxyz";; 
    std::string::iterator it = std::find_if(str.begin(), str.end(), func); 
    if (it != str.end()) { 
     std::cout << "found\n"; 
    } 
    else { 
     std::cout << "not found\n"; 
    } 
} 
+0

Ja, ich wusste, dass ich dumm war, ich hatte die find_if in einer if-Anweisung und konnte die Fehlermeldung nicht entziffern, danke – Patrick

4

ob Du str ein einzelnes Zeichen c innerhalb einer std :: string zu finden versuchen Sie wahrscheinlich std::find() anstatt std::find_if() nutzen können. Und tatsächlich, Sie wären besser dran mit std::string ist Mitglied Funktion string::find() anstelle der Funktion von <algorithm>.

#include <iostream> 
#include <string> 
#include <algorithm> 

int main() 
{ 
    std::string str = "abcxyz"; 
    size_t n = str.find('c'); 
    if(std::npos == n) 
    cout << "Not found."; 
    else 
    cout << "Found at position " << n; 
    return 0; 
} 
+1

Danke, aber nicht das, was ich versuchte: Ich habe eine isNumeric-Funktion refactoring – Patrick

Verwandte Themen