这应该返回一个包含所有word1参数的向量,其中包含sub作为子字符串,但我不断收到错误 “779行向量下标超出范围”
vector<string> search(int num1, string sub, string word1 ...)
{
va_list arguments;
string pword = "";
pword.assign(word1);
vector<std::string> vec;
vec.push_back(sub);
vec[0] = sub;
va_start(arguments, word1);
for (int i = 1; i <= num1; i++)
{
for(int x = 0; x < pword.length(); x++)
{
for(int y = 0; y < sub.length(); y++)
{
if(y+x < pword.length())
{
if(pword[y+x] == sub[y])
continue;
else
break;
}
else
break;
vec.push_back(pword);
}
}
pword = va_arg(arguments, string);
}
va_end(arguments);
return vec;
}
答案 0 :(得分:1)
所以你在你的例子中展示了这个:
vector<std::string> vec;
vec.push_back(sub);
vec[0] = sub;
您之前已将最后一行注释掉:
vector<std::string> vec;
vec.push_back(sub);
//vec[0] = sub;
我打赌你的真正的代码,代码没有用,是这样的:
vector<std::string> vec;
vec[0] = sub;
这不起作用,因为你的矢量没有元素。索引到矢量不会为您创建一个位置。它必须小于集合的大小。该行的大小为0,因此不起作用。
您可以使用初始容量初始化矢量:
const size_t count = 1;
vector<std::string> vec(count);
vec[0] = sub; // works!
答案 1 :(得分:0)
将函数原型更改为:
vector <string> search (string sub, const vector <string> & words)
在那之后,事情应该很好地落实到位。设置并清空vector <string>
结果。通过单词迭代,找到子串。当你找到一个时,将单词推入结果。
返回结果(总是)。