搜索字符串时向量下标超出范围
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)
【讨论】:
以上是关于搜索字符串时向量下标超出范围的主要内容,如果未能解决你的问题,请参考以下文章