Поиск буквенно-цифрового символа в строке с помощью find_if и isalnum

Я использую g ++ 4.7.

Что я пытаюсь сделать, так это

find_if(s.begin(), s.end(), isalnum);

где isalnum определяется в cctype а также s это строка

logman.cpp:68:47: error: no matching function for call to ‘find_if(std::basic_string<char>::const_iterator, std::basic_string<char>::const_iterator, <unresolved overloaded function type>)’

Тем не менее, это работает,

bool my_isalnum(int c) {
    return isalnum(c);
}

find_if(s.begin(), s.end(), my_isalnum);

Как я могу заставить это работать без создания моей собственной функции?

2 ответа

Решение

У компилятора возникли проблемы с определением неоднозначности между этой функцией и этой функцией. Вы хотите первый, и вам придется помочь компилятору здесь, указав подпись с приведением:

find_if(s.begin(), s.end(), (int(*)(int))isalnum);

Это должно работать.

#include <algorithm>
#include <cctype>
auto result = std::find_if (begin(s), end(s), std::isalnum);

Это должно работать

#include <algorithm >
#include <cctype>

auto result = std::find_if(std::begin(s), std::end(s),  isalnum) ;
Другие вопросы по тегам