我正在写一个词法分析器,我正在使用数组来搜索关键词和保留词:
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]}”
答案 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;