Поиск буквенно-цифрового символа в строке с помощью 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) ;