-2

这应该返回一个包含所有 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;
}
4

2 回答 2

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!
于 2013-10-10T00:34:41.807 回答
0

将函数原型更改为:

vector <string> search (string sub, const vector <string> & words)

在那之后,事情应该会很好地到位。设置并清空vector <string>结果。遍历单词,找到子字符串。当你找到一个时,把这个词推到结果中。

返回结果(总是)。

于 2013-10-10T00:11:26.623 回答