我正在尝试编写一个函数,如果字符串中有 2 个相邻字符都是数字,则返回 true。但是,对于我拥有的代码,我不断收到奇怪的表单错误:
C:\mingw\include\c++\6.2.0\bits\stl_algo.h:950:21:从"_ForwardIterator std::__adjacent_find(_ForwardIterator、_ForwardIterator、_BinaryPredicate) [_ForwardIterator = __gnu_cxx::__normal_iterator>; _BinaryPredicate = __gnu_cxx::__ops::_Iter_comp_iter]"中要求
因此,我正在寻找解决方案或围绕我已经写过的内容的不同方式。这是我的代码:
bool deriv2::compare(char a, char b){
if (isdigit(a) == true && isdigit(b) == true){
return true;
}
else return false;
}
bool deriv2::filter(string word){
string::iterator it;
it = adjacent_find (++it, word.end(), compare);
if (it!=word.end()){
return true;
}
return false;
}
根据compare
方法的声明方式,它可能是编译错误的根源。重要的是二进制谓词,即 compare
,传递的不是成员函数。运行下面的程序应该有一个退出代码 1
.
作为旁注,在这个例子中,filter
函数也可以static
,但我保留了它,所以很容易复制,而无需static
compare
函数。
#include <algorithm>
#include <cctype>
#include <string>
struct deriv2
{
static bool compare(char a, char b);
bool filter(std::string const& word) const;
};
bool deriv2::compare(char a, char b)
{
using std::isdigit;
return isdigit(a) && isdigit(b);
}
bool deriv2::filter(std::string const& word) const
{
using std::adjacent_find;
return adjacent_find(word.begin(), word.end(), compare) != word.end();
}
int main()
{
deriv2 d;
return d.filter("ab34cd");
}