如何将adjacent_find与字符串C++一起使用



我正在尝试编写一个函数,如果字符串中有 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");
}

相关内容

  • 没有找到相关文章

最新更新