搜索字符串时向量下标超出范围

Posted

技术标签:

【中文标题】搜索字符串时向量下标超出范围【英文标题】:Vector subscript out of range when searching for a string 【发布时间】:2015-10-14 02:53:47 【问题描述】:

我正在打开一个文件并读取 10k 个名称的列表。将其放入数组 (names[]) 后,我需要搜索数组,查看名称是否与输入的字符串匹配,如果匹配,则需要将这些匹配项放入向量 (vsFirst)。这很容易,但我得到一个超出范围的向量下标。这是我这部分的代码:

bool NameSearch::FindLastNames(vector<string> &vsFirst, string n)

    name = n;
    int count = 0;
    for (int i = 0; i < total; i++)
    
        string holder = names[i];
        string find = name;
        cout << holder;
        int index = holder.find_first_of(",");
        if ((holder.rfind(find, index)) && holder.rfind(find, index)<=  holder.length())
        
            cout << "it was found";
            vsFirst.push_back(holder);
            bReady = true;
        
    
    return bReady;
 

我做错了什么?我已经运行了一些测试,看起来它甚至没有进入 for 循环。我对该函数的调用是:

vector<string> lastNames;


nSearch.FindLastNames(lastNames, searchTerm);

数组中的所有名字都采用lastname, firstname 的形式。我知道数组正在加载名称。

帮助?谢谢!

【问题讨论】:

names 在哪里定义?我希望不是一个全局变量。此外,您的代码效率低下 - 它会生成大量字符串副本。您可能需要清除 vsFirst 以防重复使用的向量被传递给您的函数(取决于您想要的行为) 【参考方案1】:

要检查是否找到子字符串,您需要与std::string::npos进行比较

改变

if ((holder.rfind(find, index)) && holder.rfind(find, index)

if (holder.rfind(find, index) != std::string::npos && holder.rfind(find, index) != std::string::npos)

【讨论】:

以上是关于搜索字符串时向量下标超出范围的主要内容,如果未能解决你的问题,请参考以下文章

二维向量下标超出范围

错误向量下标超出范围

MPI_Gatherv 向量下标超出范围

c++和opencv中的向量下标超出范围错误

向量下标超出函数范围

(opencv) 调试断言失败,向量下标超出范围