2009-04-20 5 views
2

Je suis stupide ici, mais je ne peux pas obtenir la signature de fonction pour le prédicat va find_if quand itérer sur une chaîne:en utilisant std :: find_if avec std :: string

bool func(char); 

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

Dans ce cas, Google n'a pas été mon ami :(quelqu'un est-il ici?

+0

Quelle est la question? Est-ce que quelqu'un est ici? – kim366

Répondre

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

Oui, je savais que j'étais stupide, j'avais le find_if dans une instruction if et je n'arrivais pas à déchiffrer le message d'erreur, merci – Patrick

4

Si vous êtes en train d'essayer de trouver un seul caractère c dans un std :: string str vous pouvez probablement utiliser std::find() plutôt que std::find_if(). Et, en fait, vous feriez mieux d'utiliser std::string la fonction membre string::find() plutôt que la fonction de <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

Merci, mais pas ce que j'essayais de faire: je refaisais une fonction isNumeric – Patrick