C ++数组和查找函数

时间:2014-05-11 12:02:14

标签: c++ arrays lexer

我正在写一个词法分析器,我正在使用数组来搜索关键词和保留词:

string keywords[20] = {

  "function",
  "if",
  "while",
  "halt",
};

我正在尝试使用:

bool isKeyword(string s)
{
  return find( keywords.begin(), keywords.end(), s ) != keywords.end();
}

但是我收到错误:“错误:'关键字'中成员'end'的请求,这是非类型'std :: string [20] {aka std :: basic_string [20]}”

1 个答案:

答案 0 :(得分:1)

普通数组没有方法,因此您无法在其上调用begin()end()。但是您可以使用同名的非成员函数:

#include <alorithm> // for std::find
#include <iterator> // for std::begin, std::end

bool isKeyword(string s)
{
  std::find(std::begin(keywords), std::end(keywords), s ) != std::end(keywords);
}

如果你没有C ++ 11支持,你可以自己轻松地推出这些函数,或者使用数组的大小来获得结束迭代器:

return std::find(keywords, keywords + 20, s ) != keywords + 20;