2013-10-09 40 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