使用字符串向量的C ++中的std :: find失败

时间:2018-06-20 16:26:15

标签: c++

我正在用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出现错误,显示读取字符串字符时出错。我不明白代码哪里出了问题。感谢您的提前帮助。

3 个答案:

答案 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;
    }