我正在用C ++写一个小程序,该函数检查给定的字符串是否存在于字符串向量中。这是代码
std::vector<std::string> keywords {std::string("add_contact"),std::string("who"),std::string("block"),std::string("make_group"),std::string("send_images")}; // List of keywords defined in the grammar
bool search_Keyword(std::string keyword_text)
{
auto pos = std::find(keywords.begin() , keywords.end( ), keyword_text);
return pos == keywords.end( );
}
在调试此代码时,我发现std :: find出现错误,显示读取字符串字符时出错。我不明白代码哪里出了问题。感谢您的提前帮助。
答案 0 :(得分:1)
听起来调试器正在告诉您无法读取字符串。发生这种情况的原因可能多种多样(例如,优化会破坏调试信息,在进入函数主体之前尝试读取函数自变量,调试器中的错误),但不一定表明存在问题。查看程序的输出,使用调试器检查程序中的其他位置,和/或使用调试版本来验证您的代码在执行正确的操作。
答案 1 :(得分:0)
您编写的代码很好。唯一可疑的是,如果找到一个项目,您将返回false
!更好的解决方案是:
bool isKeyword(const std::string& keyword_text) // <-- better name
{
auto pos = std::find(keywords.begin() , keywords.end( ), keyword_text);
return pos != keywords.end();
}
答案 2 :(得分:0)
这是我用来完全满足您需要的代码段,如果只需要它用于字符串,则可以删除所有模板内容(我需要它与文字类型无关):
template <typename T, typename X>
bool KeywordLookUp(std::vector<T> &vec, X toFind)
{
auto pos = find(vec.begin(), vec.end(), toFind);
if (pos == vec.end())
{
return false;
}
else
{
return true;
}