我正在打开一个文件并阅读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。我知道数组已经加载了名称。
帮助?谢谢!
答案 0 :(得分: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)