2013-10-09 19 views
-2

据说这是为了与包含子为子,但我不断收到错误 “行779向量下标越界”的所有字1参数可变的参数号功能运行时错误

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

没有理由在你的代码要在C变参++ – aaronman

+1

无处你索引'vec' –

+0

只是改变了,现在它确实 – user1767077

回答

0
返回矢量

更改函数原型:

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

在那之后,事情应该落入地方相当不错。设置并清空vector <string>结果。通过单词迭代,找到子字符串。当你找到一个,把这个单词推入结果。

返回结果(总是)。

+0

我有使用可变数量的参数 – user1767077

+0

不帮助OP理解*为什么*他的代码不起作用。 –

+0

@ user1767077你为什么要?传递矢量是一个更好的设计。 –

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; 

而且这不起作用b因为你的矢量没有元素。索引到矢量中并不会为您创建点。它必须小于集合的大小。该行的大小为0,因此不起作用。

您可以用初始容量初始化向量:

const size_t count = 1; 
vector<std::string> vec(count); 
vec[0] = sub; // works! 
+0

当我这样做,我有一个ddifferent运行时错误,不是从矢量类抛出异常。尽管谢谢,但这确实使我更接近。东西被打印 – user1767077