使用find_if和isalnum在字符串中查找字母数字字符

时间:2012-11-07 02:42:33

标签: c++ string stl g++

我正在使用 g ++ 4.7

我想做的就是这个,

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

其中isalnumcctype中定义,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);

如何在不创建自己的功能的情况下使其工作?

3 个答案:

答案 0 :(得分:8)

编译器在this functionthis function之间消除歧义的麻烦。你想要第一个,你必须通过使用强制转换指定签名来帮助编译器:

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

答案 1 :(得分:2)

这应该有用。

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

答案 2 :(得分:0)

这应该有效

#include <algorithm >
#include <cctype>

auto result = std::find_if(std::begin(s), std::end(s),  isalnum) ;